[MySQL] ORDER BY 특정 값 우선 정렬 하기 (ORDER BY FIELD)

DongHo Im·2022년 2월 10일
0

SQL

목록 보기
8/11

MySQL에서 ORDER BY 사용 시 특정한 값을 우선적으로 정렬

FIELD 함수를 이용하여 특정한 값을 우선적으로 정렬 할 수 있다.

쿼리를 통해 데이터를 가져올 때 데이터를 기반으로 조건을 걸어서 정렬하고 싶을 때가 있다.
그때 CASEFIELD를 사용하면 가능 조건에 따라 데이터의 정렬 우선순위를 정해줄 수 있다.

FIELD

ORDER BY FIELD (column, 1순위, 2순위, 3순위, n순위...)

어떤 특정 데이터의 값의 정렬을 우선으로 정해서 정렬하고 싶을 때 사용하면 된다.

// 기본 테이블
mysql > SELECT id, title, status 
          FROM movie
idtitlestatus
1어벤져스2
2극한직업0
3타이타닉1
4스파이더맨1
// 특정 컬럼을 order by 구에 지정하여 사용하기
mysql > SELECT id, title, status  
          FROM movie 
         ORDER BY FIELD(status, 1, 2, 0) 
idtitlestatus
1타이타닉1
2스파이더맨1
3어벤져스2
4극한직업0
  • status의 값 별로 정렬 순위를 정해준 것이다. 값 1이 1순위고 2가 2순위, 0이 3순위인 것을 확인할 수 있다.

CASE

CASE
    WHEN <condition1> THEN <result1>
    WHEN <condition2> THEN <result2>
    WHEN <conditionN> THEN <resultN>
    ELSE <result>
END;

IF문과 비슷하게 동작하는 CASE문은 condition에 조건을 넣으면 되고 THEN 뒤에는 정렬 순위를 넣으면 된다.

// 기본 테이블
mysql > SELECT id, title, start_at, end_at 
          FROM movie
idtitlestart_atend_at
1어벤져스2021-11-012021-11-31
2극한직업2021-12-012021-12-31
3타이타닉2022-01-012022-01-31
4스파이더맨2022-02-012022-02-28
mysql > SELECT NOW(); // 2022-02-10

// 특정 컬럼을 조건에 맞춰 정렬하기
mysql > SELECT id, title, start_at, end_at
          CASE
               WHEN start_at <= NOW() AND NOW() < end_at THEN 1
               ELSE 2
           END movie_order
          FROM movie
         ORDER BY movie_order
idtitlestart_atend_at
4스파이더맨2022-02-012022-02-28
1어벤져스2021-11-012021-11-31
2극한직업2021-12-012021-12-31
3타이타닉2022-01-012022-01-31
  • 위 예제는 오늘이 영화 상영 기간에 포함되어있다면 1순위, 아니면 2순위로 정렬된다.

CASE문은 ORDER BY 구에도 사용할 수 있다. CASE문은 condition에 조건을 넣으면 되고 THEN 뒤에는 정렬 순위를 넣으면 된다.

// 기본 테이블
mysql > SELECT id, title, status 
          FROM movie
idtitlestatus
1어벤져스2
2극한직업0
3타이타닉1
4스파이더맨1
// case 문을 order by 구에서 사용하기
mysql > SELECT id, title, status  
          FROM movie 
         ORDER BY CASE 
                       WHEN status = 1 THEN 1
                       WHEN status = 2 THEN 2
                       ELSE 0
                   END AS 
idtitlestatus
1타이타닉1
2스파이더맨1
3어벤져스2
4극한직업0
  • status의 값 별로 정렬 순위를 정해준 것이다. 값 1이 1순위고 2가 2순위, 0이 3순위인 것을 확인할 수 있다.
profile
[DATABASE] 비전공자 출신의 개발 도전!

0개의 댓글