ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณ ๋์ Kit ์ SELECT ๋ฌธ์ ์ค์์ ๋์ฅ๊ท ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ถ๋ฅํ๊ธฐ 1,2๋ฅผ ํ์ด๋ณด์๋ค.
๊ฐ์ level3 ๋ก ๋ฌถ์ฌ์์ผ๋ ์ฒด๊ฐ์ ๋ ๋ฒจ ์ฐจ์ด๊ฐ ์๋ค๊ณ ๋๊ปด์ก๋ค..
case when ๊ณผ windowํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ค.
๋ฌธ์ 1
https://school.programmers.co.kr/learn/courses/30/lessons/299307
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋์ฅ๊ท ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ 100 ์ดํ๋ผ๋ฉด 'LOW', 100 ์ด๊ณผ 1000 ์ดํ๋ผ๋ฉด 'MEDIUM', 1000 ์ด๊ณผ๋ผ๋ฉด 'HIGH'๋ผ๊ณ ๋ถ๋ฅํฉ๋๋ค. ๋์ฅ๊ท ๊ฐ์ฒด์ ID(ID)์ ๋ถ๋ฅ(SIZE)๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํด ์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๊ฐ์ฒด์ ID์ ๋ํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด ์ฃผ์ธ์.
๋ฌธ์ ์ ์์...
๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง๊ฒ select๋ฅผ ํ๊ธฐ ์ํด SQL์ ์กฐ๊ฑด๋ฌธ ์ค ํ๋์ธ case when์ ์ฌ์ฉํ๋ค.
case when ์กฐ๊ฑด๋ฌธ
๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค.
CASE
WHEN ์กฐ๊ฑด1 THEN ๊ฒฐ๊ณผ1
WHEN ์กฐ๊ฑด2 THEN ๊ฒฐ๊ณผ2
ELSE ๊ธฐ๋ณธ๊ฐ
END
์ถ๊ฐ๋ก case when ์ ์ ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
โ
์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ ๋ฐํ ๊ฐ๋ฅ
โ
์ง๊ณ ํจ์์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅ
โ
์ ๋ ฌ ๊ธฐ์ค์ ๋์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ
โ
์๋์ฐ ํจ์์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅ
๋ฌธ์ ํ์ด
1. ์กฐ๊ฑด์ ๋ง๋ case when ์กฐ๊ฑด๋ฌธ์ ์์ฑํ๋ค.
select case when size_of_colony <=100 then "LOW"
when size_of_colony <=1000 then "MEDIUM"
else "HIGH"
end as size
from ecoli_data
์ฝ๋
select id, case when size_of_colony <=100 then "LOW"
when size_of_colony <=1000 then "MEDIUM"
else "HIGH"
end as size
from ecoli_data
order by id
ํฌ๊ฒ ์ด๋ ต์ง ์์ ๋ฌธ์ ์๋ค.
๋ฌธ์ 2
https://school.programmers.co.kr/learn/courses/30/lessons/301649
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋์ฅ๊ท ๊ฐ์ฒด์ ํฌ๊ธฐ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ ๋ ์์ 0% ~ 25% ๋ฅผ 'CRITICAL', 26% ~ 50% ๋ฅผ 'HIGH', 51% ~ 75% ๋ฅผ 'MEDIUM', 76% ~ 100% ๋ฅผ 'LOW' ๋ผ๊ณ ๋ถ๋ฅํฉ๋๋ค. ๋์ฅ๊ท ๊ฐ์ฒด์ ID(ID) ์ ๋ถ๋ฅ๋ ์ด๋ฆ(COLONY_NAME)์ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๊ฐ์ฒด์ ID ์ ๋ํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์ . ๋จ, ์ด ๋ฐ์ดํฐ์ ์๋ 4์ ๋ฐฐ์์ด๋ฉฐ ๊ฐ์ ์ฌ์ด์ฆ์ ๋์ฅ๊ท ๊ฐ์ฒด๊ฐ ์๋ก ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ถ๋ฅ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
๋ฌธ์ ์ ์์...
์ด์ ํฌ์คํ ์์ window ํจ์์ ๋ํด ๊ฐ๋จํ ์ ๋ฆฌํ์๋ค.
ํด๋น ๋ฌธ์ ์์๋ ๊ทธ ์ค์์๋ percent_rank() ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
PERCENT_RANK() OVER (
PARTITION BY partition_expression
ORDER BY
sort_expression [ASC | DESC]
)
๋ฌธ์ ํ์ด
์์ ๋ฌธ์ ๋ณด๋ค ์กฐ๊ฑด์ด ์กฐ๊ธ ๊ตฌ์ฒดํ๋์๋ค.
window ํจ์๋ฅผ case when๊ณผ ํจ๊ป ์ฌ์ฉํ์๋ค.
select id, percent_rank() over (order by size_of_colony) r from ecoli_data
size_of_colony๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฑ๋ถ์จ ์์๋ฅผ ๊ตฌํ๋ค.
๊ตฌํ r ๊ฐ์ ๊ธฐ์ค์ผ๋ก case when์ ์์ฑํ๋ฉด ๋๋ค.
์ฝ๋
select id,
case when r <=0.25 then "LOW"
when r<=0.5 then "MEDIUM"
when r<=0.75 then "HIGH"
else "CRITICAL"
end as colony_name
from (select id, percent_rank() over (order by size_of_colony) r from ecoli_data) ranking
order by id
window ํจ์๋ฅผ ํตํด percent_rank๋ฅผ ๊ตฌํ์ฌ ์๋ธ์ฟผ๋ฆฌ๋ก ์ฌ์ฉํ๋ค.
์๋ก์ด ๋ฌธ์ ๋ค์ด ์ถ๊ฐ๋๊ฒ ์ง๋ง.. ์ด์ ๋ช ๋ฌธ์ ์ ๋จ์๋ฐ.!!! ๐