Как мне сначала возвращать строки с определенным значением?

Я хочу, чтобы мой запрос возвращал строки таблицы, где столбец содержит определенное значение сначала, а затем возвращает остальные строки в алфавитном порядке.

Если у меня есть таблица, похожая на этот пример:

 - Table: Users
 - id - name -  city
 - 1    George  Seattle
 - 2    Sam     Miami
 - 3    John    New York
 - 4    Amy     New York
 - 5    Eric    Chicago
 - 6    Nick    New York

И используя эту таблицу, я хочу, чтобы мой запрос возвращал строки, содержащие сначала Нью-Йорк, а затем остальные строки в алфавитном порядке по городу. Можно ли использовать только один запрос?

Ответ 1

В SQL Server, Oracle, DB2 и многих других системах баз данных вы можете использовать:

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city

Ответ 2

Если ваш SQL-диалект достаточно интеллектуальный, чтобы обрабатывать булевы выражения как имеющие числовое значение, вы можете использовать:

SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`

Ответ 3

Мой ответ может быть старым и не обязательным, но кому-то может понадобиться другой подход, поэтому размещайте его здесь.

У меня было такое же требование, что и я, это работало для меня.

Select * from Users
ORDER BY
(CASE WHEN city = 'New York' THEN 0 ELSE 1 END), city
GO

PS

это для SQL