Day 20. ๋ฏธ์ธ๋จผ์ง ์์น์ ๊ณ์ ๊ฐ ์ฐจ์ด
https://solvesql.com/problems/finedust-seasonal-summary/
with t1 as (
select *
, case
when measured_at between '2022-03-01' and '2022-05-31' then 1
when measured_at between '2022-06-01' and '2022-08-31' then 2
when measured_at between '2022-09-01' and '2022-11-30' then 3
else 4
end as season_n
from measurements
), t2 as (
select season_n
, pm10
, PERCENT_RANK() OVER (PARTITION by season_n ORDER BY pm10 asc) as percent
, ROW_NUMBER() OVER (PARTITION by season_n ORDER BY pm10 asc) as rnk
, round(avg(pm10) over(PARTITION by season_n),2) as pm10_average
from t1
)
select
case
when season_n = 1 then 'spring'
when season_n = 2 then 'summer'
when season_n = 3 then 'autumn'
else 'winter'
end as season
, pm10 as pm10_median
, pm10_average
from t2
where (season_n, rnk) in (select season_n
, ceil(max(rnk) / 2) as ceil_n
from t2
group by season_n)
โCASE WHEN ์ฌ์ฉํด์ ๊ณ์ ๋๋ฒ๋ฅผ ๊ณ์ ๋ก ๋ง๋ค๊ธฐ
โWHERE ์ ์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํด์ ํด๋นํ๋ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
+) WHERE ์ : ์๋ธ์ฟผ๋ฆฌ
โ๊ณ์ ๋๋ฒ๋ก ๊ทธ๋ฃน ํ์ด ํ ๊ฒ ๋ค ์ค์ ์ต๋๊ฐ 2๋ก ๋๋ ๊ฒ
+) WITH ์ : T1
โCASE WHEN ์ฌ์ฉํด์ ๋ด, ์ฌ๋ฆ, ๊ฐ์, ๊ฒจ์ธ ๊ธฐ์ค์ผ๋ก ์ซ์ ๋ฃ๊ธฐ (๋์ค์ ์ ๋ ฌ์ ์ํด ์ซ์๋ก ์ง์ )
+) WITH ์ : T2
โPERCENT_RANK(), ROW_NUMBER(), AVG() ์ ์๋์ฐ ํจ์ ์ฌ์ฉํด์ ๊ณ์ ๋๋ฒ ๊ธฐ์ค์ผ๋ก ๊ฐ ๋์ค๊ฒ ํ๊ธฐ