반응형
MySQL에서 ORDER BY 사용 시 특정한 값을 우선적으로 정렬
FIELD 함수를 이용하여 특정한 값을 우선적으로 정렬 할 수 있다.
쿼리를 통해 데이터를 가져올 때 데이터를 기반으로 조건을 걸어서 정렬하고 싶을 때가 있다.
그때 CASE나 FIELD를 사용하면 가능 조건에 따라 데이터의 정렬 우선순위를 정해줄 수 있다.
FIELD
ORDER BY FIELD (column, 1순위, 2순위, 3순위, n순위...)
어떤 특정 데이터의 값의 정렬을 우선으로 정해서 정렬하고 싶을 때 사용하면 된다.
// 기본 테이블
SELECT id,
title,
status
FROM movie
;
1 | 어벤져스 | 2 |
2 | 극한직업 | 0 |
3 | 타이타닉 | 1 |
4 | 스파이더맨 | 1 |
// 특정 컬럼을 order by 구에 지정하여 사용하기
SELECT id, title, status
FROM movie
ORDER BY FIELD(status, 1, 2, 0)
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
1 | 어벤져스 | 2021-11-01 | 2021-11-31 |
2 | 극한직업 | 2021-12-01 | 2021-12-31 |
3 | 타이타닉 | 2022-01-01 | 2022-01-31 |
4 | 스파이더맨 | 2022-02-01 | 2022-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
4 | 스파이더맨 | 2022-02-01 | 2022-02-28 |
1 | 어벤져스 | 2021-11-01 | 2021-11-31 |
2 | 극한직업 | 2021-12-01 | 2021-12-31 |
3 | 타이타닉 | 2022-01-01 | 2022-01-31 |
- 위 예제는 오늘이 영화 상영 기간에 포함되어있다면 1순위, 아니면 2순위로 정렬된다.
CASE문은 ORDER BY 구에도 사용할 수 있다. CASE문은 condition에 조건을 넣으면 되고 THEN 뒤에는 정렬 순위를 넣으면 된다.
// 기본 테이블
mysql > SELECT id, title, status
FROM movie
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
1 | 타이타닉 | 1 |
2 | 스파이더맨 | 1 |
3 | 어벤져스 | 2 |
4 | 극한직업 | 0 |
- status의 값 별로 정렬 순위를 정해준 것이다. 값 1이 1순위고 2가 2순위, 0이 3순위인 것을 확인할 수 있다.
반응형
'DB > MySQL' 카테고리의 다른 글
[MySQL] SQL 문자열 자르기 - SUBSTR / SUBSTRING / LEFT / RIGHT (0) | 2022.04.01 |
---|---|
[MySQL] 원하는 구분자 기준으로 문자열 자르기 : SUBSTRING_INDEX (0) | 2022.04.01 |
[MySQL] 저장 프로시저 (Stored Procedure) (0) | 2022.04.01 |
[MySQL] 두 날짜 사이 일수, 주말(평일) 일수 구하기 (0) | 2022.04.01 |
[MySQL] 왜래키(Foreign Key) 정리 (0) | 2022.04.01 |