[SQL] 정렬조건 만들어내기

Gi Woon Lee·2024년 12월 11일
0

TIL

목록 보기
74/78

⭐point 는 🔥order by 절에서 case when 문을 통해 정렬조건을 커스텀 할 수 있다🔥 는 것

select 
	column1, 
    column2
from 
	table_1
order by case 
	when column1 == '월요일' then 1
    when column1 == '화요일' then 2
    .
    .
    .

예시 문제 링크: https://solvesql.com/problems/weekday-stats-airpollution/

-- 요일별 대기 오염도 평균
-- 1. date 데이터를 요일 번호 형식으로 추출 strftime('형식', 칼럼) : 0(일), 1(월) 형식으로 반환
-- 2. 숫자 형식으로 반환된 데이터를 case when을 통해 문자로 변환
-- 3. order by 절에 case when 을 사용하여 정렬조건 조작


select 
-- 1. date 데이터 -> 요일 번호 형식으로 추출 by strftime('형식', 칼럼)
-- 2. 숫자 형식 데이터를 case when을 통해 문자로 변환
    case strftime('%w',measured_at)
        when '0' then '일요일'
        when '1' then '월요일'
        when '2' then '화요일'
        when '3' THEN '수요일'
        when '4' then '목요일'
        when '5' then '금요일'
        when '6' then '토요일' 
        END as weekday,
    round(avg(no2),4) no2,
    round(avg(o3),4) o3,
    round(avg(co),4) co,
    round(avg(so2),4) so2,
    round(avg(pm10),4) pm10,
    round(avg(pm2_5),4) pm2_5
from measurements
group by 1
-- 3. order by 절에 case when 을 사용하여 정렬조건 조작
order by 
    case strftime('%w',measured_at)
        when '1' then 1
        when '2' then 2
        when '3' THEN 3
        when '4' then 4
        when '5' then 5
        when '6' then 6 
        when '0' then 7
    END

핵심(order by에서 case when 사용)
전체 코드에서도 배울 점이 많지만, 이번 TIL에서는 order by 정렬 조건 커스텀하기에 집중해보자.

order by 절 떼오기

order by 
    case strftime('%w',measured_at)
        when '1' then 1
        when '2' then 2
        when '3' THEN 3
        when '4' then 4
        when '5' then 5
        when '6' then 6 
        when '0' then 7
    END

measured_at데이터는 strftime 함수를 통해 %w형식으로 바뀐 상태다

# strftime 함수를 통해 datetype 데이터를 str로바꿔주기 
2024-12-01 -> `0`(일요일)
2024-12-02 -> `1`(월요일)
2024-12-03 -> `3`(화요일)

번호대로 정렬하게 되면 일요일 ~ 토요일 정렬이 이뤄지겠지만
문제에서 원하는 정렬은 월요일 ~ 일요일 정렬이다.
이를 order by case when 커스텀을 통해 해결한다.

0개의 댓글