2010-02-07 3 views
6

'장소'정수 값을 기반으로 MYSQL 데이터베이스 테이블에서 정렬 된 행 목록을 가져 오려고합니다.SQL에서 값 0을 제외한 재정렬 정수

SELECT * FROM mytable 
ORDER BY place; 

이 값 장소 = 0 모든 행이 테이블의 끝에 나타납니다 것을 제외하고 괜찮 작동합니다.

그래서 내 테이블 인 경우 :

name place 
---- ----- 
John 1 
Do 2 
Eric 0 
Pete 2 

이 될해야합니다

name place 
---- ----- 
John 1 
Do 2 
Pete 2 
Eric 0 

답변

4
SELECT * 
FROM myTable 
ORDER BY place>0 DESC, place 

는 전에 CASE 건설을 본 적이 CASE

+0

작고 괜찮아 보이는이 솔루션을 좋아합니다. 효율성이 떨어지지 않는 한이 사실을 받아 들여야합니다. – Roalt

+0

또는 'ORDER BY place = 0, place' – ysth

6
order by case when place = 0 then 1 else 0 end asc, place asc 

모든 비 - 제로 먼저 주문받을 그런 식으로.

+0

없는 솔루션입니다 (하지만, 내가 초기에 내 SQL 클래스를 가지고 :

는 또한 우리가 같이 두 개의 값으로 정렬 할 수 있습니다 구십). 단순함으로 인해 @ 트루 소프트를 선호합니다. – Roalt

2
SELECT * 
FROM myTable 
ORDER BY CASE place WHEN 0 THEN 9999 ELSE place END 

이 방법은 우리가 9999 (또는 다른 값) 장소 열에서 가능한 모든 값보다 큰 것으로 알려져 있음을 의미한다.

ORDER BY CASE place WHEN 0 THEN 0 ELSE -1 END, place 
+0

감사합니다. 9999 트릭은 내가 생각한 것입니다. 평가 된 정렬 기준을 변경할 수 있다는 것을 몰랐습니다. 중복 주문 목록에 고성능 벌금이 부과 될 경우 이는 내 첫 번째 선택 일 것입니다. – Roalt