๋ฌธ์
HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE ํ ์ด๋ธ์ ์ด์ฉํด ์ฌ์๋ณ ์ฑ๊ณผ๊ธ ์ ๋ณด๋ฅผ ์กฐํํ๋ คํฉ๋๋ค.
ํ๊ฐ ์ ์๋ณ ๋ฑ๊ธ๊ณผ ๋ฑ๊ธ์ ๋ฐ๋ฅธ ์ฑ๊ณผ๊ธ ์ ๋ณด๊ฐ ์๋์ ๊ฐ์ ๋,
์ฌ๋ฒ, ์ฑ๋ช , ํ๊ฐ ๋ฑ๊ธ, ์ฑ๊ณผ๊ธ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
ํ๊ฐ๋ฑ๊ธ์ ์ปฌ๋ผ๋ช ์ GRADE๋ก, ์ฑ๊ณผ๊ธ์ ์ปฌ๋ผ๋ช ์ BONUS๋ก ํด์ฃผ์ธ์.
๊ฒฐ๊ณผ๋ ์ฌ๋ฒ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
---
๊ธฐ์ค ์ ์ ํ๊ฐ ๋ฑ๊ธ ์ฑ๊ณผ๊ธ(์ฐ๋ด ๊ธฐ์ค)
96 ์ด์ S 20%
90 ์ด์ A 15%
80 ์ด์ B 10%
์ด์ธ C 0%
---
ํ์ด
select e.EMP_NO, e.EMP_NAME, g.GRADE,
case when g.GRADE = 'S' then SAL*0.20
when g.GRADE = 'A' then SAL*0.15
when g.GRADE = 'B' then SAL*0.10
else SAL*0 end as BONUS
from HR_EMPLOYEES e join
(
select EMP_NO,
case when avg(SCORE) >= 96 then 'S'
when avg(SCORE) >= 90 then 'A'
when avg(SCORE) >= 80 then 'B'
else 'C' end as GRADE
from HR_GRADE
group by EMP_NO
) g on e.EMP_NO = g.EMP_NO
order by EMP_NO asc
์ ๋ต ์ฝ๋ ๋จผ์ ์ฒจ๋ถํ๋ค.
์ญ๋๊ธ์ผ๋ก ๊ธฐ๋ค.......
์ผ๋จ GRADE๋ฅผ ๊ตฌํด์ผํ๋๋ฐ.. ์์ธ์ง ๋ฌธ์ ์๋ ์ค๋ช ์ด ๋๋ฝ๋์ด์๋ค.
๊ทผ๋ฐ ์ค๋ช ์ ๋๋ฝ์ธ๋ฐ ์นดํ ๊ณ ๋ฆฌ๋ group by๋ก ๋๋์ด์๋ค.. ๋ญ์ง...
์๋ฌดํผ! HR_GRADE ํ ์ด๋ธ์๋ ๋ถ๊ธฐ๋ณ ์ ์๋ก ๋์์๋ค. ์์ธํ๋ณด๋ฉด EMP_NO๊ฐ ์ค๋ณต์ด๋ค
๋ฐ๋ผ์ group by๋ก ์ง์๋ณ ํ๊ท ์ ์๋ฅผ ๊ตฌํ ๋ค์
case when then ์ ์ ์ด์ฉํ์ฌ ์ํ๋ฒณ์ ๋ถ์ฌํ๊ณ ์ด๋ฅผ GRADE ํ๋์ ๋ฃ์ด์ฃผ์๋ค
select EMP_NO,
case when avg(SCORE) >= 96 then 'S'
when avg(SCORE) >= 90 then 'A'
when avg(SCORE) >= 80 then 'B'
else 'C' end as GRADE
from HR_GRADE
group by EMP_NO
์ด์ ์ด ํ ์ด๋ธ๊ณผ(!!) HR_EMPLOYEES ํ ์ด๋ธ์ ์กฐ์ธํ๋ค.
from HR_EMPLOYEES e join (์ ํ
์ด๋ธ) g on e.EMP_NO = g.EMP_NO
๊ทธ๋ฆฌ๊ณ GRADE์ ๋ฐ๋ผ ๋ case when then์ผ๋ก ์ฑ๊ณผ๊ธ์ ๊ณ์ฐํ๋ฉด ๋
select e.EMP_NO, e.EMP_NAME, g.GRADE,
case when g.GRADE = 'S' then SAL*0.20
when g.GRADE = 'A' then SAL*0.15
when g.GRADE = 'B' then SAL*0.10
else SAL*0 end as BONUS