특정 값이있는 행을 먼저 반환하려면 어떻게해야합니까?


124

내 쿼리에서 열에 특정 값이 포함 된 테이블의 행을 먼저 반환 한 다음 나머지 행을 알파벳순으로 반환하고 싶습니다.

이 예제와 같은 테이블이있는 경우 :

 - 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

그리고 그 테이블을 사용하여 먼저 뉴욕을 포함하는 행을 반환 한 다음 도시별로 알파벳순으로 표시된 나머지 행을 반환하려고합니다. 하나의 쿼리 만 사용할 수 있습니까?


첫 번째 답변은 MSSQL이 아닌 MySQL에서만 작동하므로 가능하면 두 번째 답변으로 변경하는 것을 고려하십시오.
Magisch

끝난. 내 원래 질문은 MySQL에 관한 것이었지만 태그는 어쨌든 그것을 반영하지 않았습니다.
Phoexo 2017 년

감사합니다. 나는 오늘 아침 내가 가진 문제에 대해 비슷한 일을하려고 노력했다. :)
Magisch

답변:


195

SQL Server, Oracle, DB2 및 기타 여러 데이터베이스 시스템에서 다음을 사용할 수 있습니다.

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

1
감사! MSSQL에서 저를 도왔
Rexxo

그것은 실제로 모든 SQL 데이터베이스에서 작동합니다 (그리고 제 의견으로는 받아 들인 대답보다 훨씬 더 깨끗한 솔루션입니다)
a_horse_with_no_name

2
Oracle에서 나를 위해 작동합니다.
MonkeyWithDarts 2013

1
그리고 내가 '뉴욕'(또는 다른 값)을 마지막에 배치하는 데 필요한 것은 1과 2를 바꾸면됩니다. ORDER BY CASE WHEN city = 'New
York'THEN

4
ELSE 2섹션은 New York이 값 1을 얻는 동안 다른 모든 값은 값 2를 얻는다는 것을 의미합니다. ... 적어도 정렬 순서에 관한 한.
Rob Farley 2017 년

106

SQL 언어가 부울 표현식을 숫자 값으로 처리 할만큼 지능적인 경우 다음을 사용할 수 있습니다.

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

1
@MehrdadAfshari : 아니요, MSSQL은 ORDER BY절 에서 동등성 테스트를 처리하기에는 너무 어리 석습니다 .
chaos

@a_horse_with_no_name : MSSQL에 대해 위 쿼리를 실행 해 보셨습니까?
chaos

11
@chaos : 위의 문은 실제로 SQL Server에서 실행 되지 않지만 구문이 비표준이고 MySQL에서만 작동하기 때문입니다. 사용하는 경우 CASE(표준 SQL입니다) 문을 SQL 서버는 아주 잘에서 식을 사용할 수있는 ORDER BY절. " 동등성 테스트를 처리하기에는 너무 어리 석다 "는 것은 단순히 잘못된 것입니다. 전혀 읽어야하는 경우 : " 는 MySQL의 부울 true1(1) 에 대한 암시 적 캐스팅을 지원하지 않습니다 . "
a_horse_with_no_name 2013 년

@ Esraa_92 : 그렇다면이를 처리 할 수있는 SQL 방언이없고 Rob Farley의 대답이 필요합니다.
chaos

5
Postgres의 경우 이것은 나를 위해 일했습니다.ORDER BY id = 123 DESC, name ASC
user1032752

4

내 대답은 오래되고 필수는 아니지만 누군가 다른 접근 방식이 필요할 수 있으므로 여기에 게시하십시오.

나는 이것을 구현 한 동일한 요구 사항이 있었고 나를 위해 일했습니다.

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

추신

이것은 SQL입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.