⭐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 bycase when 커스텀을 통해 해결한다.