views:

123

answers:

2

I want my query to return the rows of the table where a column contains a specific value first, and then return the rest of the rows alphabetized.

If I have a table something like this example:

 - 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

And using that table I want to my query to return the rows which contain New York first, and then the rest of the rows alphabetized by city. Is this possible to do using only one query?

+8  A: 
SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`
chaos
This answer makes me feel dumb. Well done chaos.
Bill
That easy? D'oh. Thanks ;D
Phoexo
Does it work on MSSQL?
Mehrdad Afshari
+1  A: 

If you're in an environment that handles the = differently, you may prefer:

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