본문 바로가기

SQL

[SQL] W3schools SQL 실습 - ORDER BY 내가 원하는 순서로 정렬

반응형

회사에서 SQL을 사용하면서 알파벳 순서나, 한글 순서가 아닌 임의로 순서를 정해서 정렬을 해야 하는 일이 생겼다. 

 

구글링을 통해 해결했고, 알게된 내용을 공유하고자 합니다.

 

w3schools.com 이라는 곳에서 아주 쉽고 빠르게 웹 상에서 SQL을 연습할 수 있어 이 사이트를 통해 예제를 실습해보면서 임의로 순서를 정하여 정렬을 해보도록 하자.

 

접속 링크:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

 

 


예제

구매 수량에 따라 경품을 증정하는 프로모션을 진행한다.

100개 이상은 '경품1', 50개 이상은 '경품 2'를 증정하며, 경품 배송을 위한 고객 info도 함께 확인이 필요하다.

CASE 문을 사용해 '경품 1', '경품 2'를 구현해보자.

SELECT
D.OrderID,O.CustomerID, C.CustomerName, C.Address, C.City, C.PostalCode, D.ProductID, D.Quantity,
(CASE
WHEN Quantity >= 100 THEN '경품 1'
WHEN Quantity >= 50 THEN '경품 2'
ELSE '없음'
END) AS Novelty
FROM OrderDetails D
INNER JOIN Orders O
ON D.OrderID = O.OrderID
INNER JOIN Customers C
ON O.CustomerID = C.CustomerID
ORDER BY CASE WHEN City = 'London' then '0' else '1' END,
D.Quantity DESC, C.CustomerID;

 

 


결괏값


 

ORDER BY + CASE

이제 여기서 City를 내가 원하는 순서인 London, Cork, Graz, Boise 순으로 정렬하려고 한다.

 

ORDER BY에 CASE문을 사용해서 가능하다.

ORDER BY CASE City WHEN 'London' then '0' WHEN 'Cork' then '1' WHEN 'Graz' then '2' 
WHEN 'Boise' then '3' else '4' END

다음과 같이 CASE문에 'London' 이면 0, 'Cork' 면 1처럼 숫자를 지정해서 그 숫자 순으로 정렬이 되게 할 수 있다.

 

SELECT
D.OrderID,O.CustomerID, C.CustomerName, C.Address, C.City, C.PostalCode, D.ProductID, D.Quantity,
(CASE
WHEN Quantity >= 100 THEN '경품 1'
WHEN Quantity >= 50 THEN '경품 2'
ELSE '없음'
END) AS Novelty
FROM OrderDetails D
INNER JOIN Orders O
ON D.OrderID = O.OrderID
INNER JOIN Customers C
ON O.CustomerID = C.CustomerID
ORDER BY CASE City WHEN 'London' then '0' WHEN 'Cork' then '1' WHEN 'Graz' then '2' 
WHEN 'Boise' then '3' else '4' END,
D.Quantity DESC, C.CustomerID;

 

결과

반응형