如何首先返回具有特定值的行?

我希望我的查询返回表中首先包含特定值的行,然后返回按字母顺序排列的其余行。

如果我有一个类似这样的表:

 - 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

使用这个表,我希望我的查询首先返回包含 New York 的行,然后返回按城市字母顺序排列的其余行。只使用一个查询是否可行?

94187 次浏览

如果您的 SQL 方言足够智能,可以将布尔表达式视为具有数值,那么您可以使用:

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

在 SQLServer、 Oracle、 DB2和许多其他数据库系统上,您可以使用:

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

我的答案可能是旧的,不需要,但有人可能需要不同的方法,因此张贴在这里。

我有相同的要求实现了这一点,为我工作。

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

附言

这是 SQL