본문 바로가기

Skills/SQL

SQL order by 특정 조건으로 정렬하기

반응형

쿼리를 작성하다 보면 특정 컬럼별 내림차순 오름차순이 아닌 특정 조건으로 정렬해야 하는 경우가 있습니다.

SQL을 사용 하여 어떻게 특정 조건으로 정렬하는지 살펴보겠습니다.

 

아래 쿼리를 사용하여 movies 예시 테이블을 만들었습니다.

CREATE TABLE movies (
    id INT PRIMARY KEY,
    title VARCHAR(50),
    director VARCHAR(50),
    release_date DATE,
    rating FLOAT,
    duration INT
);

INSERT INTO movies (id, title, director, release_date, rating, duration)
    VALUES
        (1234, '아바타', '제임스 카메론', '2009-12-17', 8.5, 162),
        (5678, '인셉션', '크리스토퍼 놀란', '2010-07-21', 8.8, 148),
        (9012, '국가대표', '권형진', '2009-12-03', 7.8, 137),
        (3456, '겨울왕국', '크리스 벅, 제니퍼 리', '2013-01-16', 7.3, 102),
        (7890, '매드맥스: 분노의 도로', '조지 밀러', '2015-05-14', 8.1, 120);

Movies 예시 데이터

 

title이 아래 순서대로 정렬 한다면 특정 컬럼으로 order by절에 추가했을 때 결과를 얻을 수 없습니다. 

국가대표
겨울왕국
매드맥스: 분노의 도로
인셉션
아바타

따라서 아래와 같이 order by절 아래 case when을 추가한 쿼리를 작성해 주면 됩니다.

select
	*
from 
	movies
order by
	case
	    when title = '국가대표' then 1
	    when title = '겨울왕국' then 2
	    when title = '매드맥스: 분노의 도로' then 3
	    when title = '인셉션' then 4
	    when title = '아바타' then 5
	end

쿼리 실행 결과

order by 절에서 title 열의 값을 case 문으로 조건을 변경했 습니다.

영화 제목이 '국가대표'인 경우에는 1, '겨울왕국'인 경우에는 2, '매드맥스: 분노의 도로'인 경우에는 3, '인셉션'인 경우에는 4, '아바타'인 경우에는 5를 반환합니다.

반환된 값에 따라 오름차순으로 정렬하여 결과를 출력했습니다.

반응형