CASE ์ปฌ๋ผ
WHEN ๊ฐ THEN ๊ฒฐ๊ณผ(์ถ๋ ฅ)
WHEN ๊ฐ THEN ๊ฒฐ๊ณผ(์ถ๋ ฅ)
WHEN ๊ฐ THEN ๊ฒฐ๊ณผ(์ถ๋ ฅ)
ELSE ๊ฒฐ๊ณผ(์ถ๋ ฅ)
END
CASE
WHEN ์ปฌ๋ผ >= ๊ฐ THEN ์ถ๋ ฅ
WHEN ์ปฌ๋ผ >= ๊ฐ THEN ์ถ๋ ฅ
WHEN ์ปฌ๋ผ >= ๊ฐ THEN ์ถ๋ ฅ
ELSE ์ถ๋ ฅ
END
๐
SELECT
name,
jumin,
birthday,
SUBSTR(jumin, 3, 2) ์ฃผ๋ฏผ์์์,
TO_CHAR(birthday, 'MM') ๋ ์ง์์์,
CASE
WHEN SUBSTR(jumin, 3, 2) IN('01', '02', '03') THEN '1๋ถ๊ธฐ'
WHEN SUBSTR(jumin, 3, 2) IN('04', '05', '06') THEN '2๋ถ๊ธฐ'
WHEN SUBSTR(jumin, 3, 2) IN('07', '08', '09') THEN '3๋ถ๊ธฐ'
WHEN SUBSTR(jumin, 3, 2) IN('10', '11', '12') THEN '4๋ถ๊ธฐ'
END ๋ถ๊ธฐ,
CASE
WHEN TO_CHAR(birthday, 'MM') BETWEEN '01' AND '03' THEN '1๋ถ๊ธฐ'
WHEN TO_CHAR(birthday, 'MM') IN('04', '05', '06') THEN '2๋ถ๊ธฐ'
WHEN TO_CHAR(birthday, 'MM') BETWEEN '07' AND '09' THEN '3๋ถ๊ธฐ'
ELSE '4๋ถ๊ธฐ'
END ๋ถ๊ธฐ2
-- DECODE(SUBSTR(jumin, 3, 2), '01', '1๋ถ๊ธฐ', '02', '1๋ถ๊ธฐ', '03', '1๋ถ๊ธฐ', '04', '2๋ถ๊ธฐ', ....)
FROM student;
๐ป
COUNT() : ๊ฐฏ์ ์ธ๊ธฐ
SUM() : ์ดํฉ
AVG() : ํ๊ท ๊ฐ
MAX() : ์ต๋๊ฐ
MIN() : ์ต์๊ฐ
STDDEV() : ํ์คํธ์ฐจ
VARIANCE() : ๋ถ์ฐ
SELECT COUNT(*) --์ ์ฒด ํ์ ์ (์ ์ฒด ํ ๊ฐฏ์)
FROM student;
๐ป
SELECT name, tel, SUBSTR(tel, 1, 3), COUNT(tel) --๋ค์คํํจ์๋ ๋จ์ผํํจ์๋ ๋์์ ์์ฌ์ ์ฌ์ฉX
FROM student;
SELECT MAX(sal) ์ต๋๊ธ์ฌ, MIN(sal) ์ต์๊ธ์ฌ, AVG(sal) ํ๊ท ๊ธ์ฌ
FROM emp;
๐ป
GROUP BY ์ : ๋ค์คํ ํจ์ ์ฒ๋ฆฌ์์ ํน์ ๊ทธ๋ฃน ๊ธฐ์ค ์ง์
GROUP BY ์ ์ง์ ๋๋ฉด ์ปฌ๋ผ ์ถ๋ ฅ์ด ๊ฐ๋ฅ
GROUP BY ์ฒ๋ฆฌ ์ดํ, ์กฐ๊ฑด ์ถ๊ฐํ๊ธฐ
-> HAVING ์ ์ฌ์ฉ
ROLLUP() : ์๋ ์๊ณ, ํฉ๊ณ ๊ณ์ฐํด์ฃผ๋ ํจ์ (๊ทธ๋ฃน์ฒ๋ฆฌํ ํจ์๋ค๋ง๋ค ์๊ณ๋์ด!)
GROUP BY ํ ์ปฌ๋ผ์ ์จ์ฃผ๋๊ฒ! ex. ROLLUP(p_date, p_code)
๐ ๊ฐ ์ง์ ๋ณ ํ๊ท ๊ธ์ฌ ๊ตฌํด๋ผ
SELECT job, AVG(sal)
FROM emp
GROUP BY job;
=> ๋จผ์ ์ง์ ๋ณ๋ก ๊ฒฐ๊ณผ๊ฐ ๋์์ผ ํ๋๊น ์ง์ ์ผ๋ก ๊ทธ๋ฃนํ์ํค๊ณ ! AVG(๊ธ์ฌ) : ํ๊ท ๊ธ์ฌ ์ถ๋ ฅ๋๊ฒ๋!
=> ์๋๋ job, AVG(sal) ์ ๋จ์ผํ ํจ์, ๋ค์คํ ํจ์๋ผ์ ๊ฐ์ด ๋ชป์ฐ์ด๋๋ฐ GROUP BY ์์ ์ฐ์ธ job์ ์ฐ์ผ ์ ์๋ค!!
๐ป
๐ญ 1. ๊ธ์ฌ๊ฐ 1500์ด์์ธ ๊ธ์ก์ ๋ํด์ ๊ฐ ์ง์ ๋ณ ํ๊ท ๊ธ์ฌ
SELECT job, AVG(sal)
FROM emp
WHERE sal >= 1500
GROUP BY job;
=> ๊ฐ ์ง์
๋ณ ์ด๋ผ๊ณ ํ์ผ๋๊น ์ง์
์ ๊ทธ๋ฃนํํ๊ณ
=> ํ๊ท ๊ธ์ฌ ๊ตฌํ๋ผ๊ณ ํ์ผ๋๊น AVG(sal)
๐ป
๐บ 2. ์ง์ ๋ณ ํ๊ท ๊ธ์ฌ๊ฐ 1500 ์ด์์ธ ๊ฒฝ์ฐ์ ๊ธ์ก๋ง
SELECT job, AVG(sal)
FROM emp
--WHERE AVG(sal) >= 1500 ๋ถ๊ฐ๋ฅ ---> ํ๊ท ๊ธ์ฌ๊ฐ ๋์ค๊ธฐ๋ ์ ์ ์กฐ๊ฑด์ ๊ฑฐ๋๊ฑด ๋ง์ด ์๋จ!
GROUP BY job
HAVING AVG(sal) >= 1500;
=> ํ๊ท ๊ธ์ฌ๊ฐ 1500์ด์์ธ ๊ฒฝ์ฐ
=> ํ๊ท ๊ธ์ฌ๋ฅผ ๊ตฌํ๊ธฐ๋ ์ ์ ํ๊ท ๊ธ์ฌ๋ฅผ ๊ฐ์ง๊ณ ์กฐ๊ฑด์ ๊ฑฐ๋๊ฑด ๋ง์ด ์๋จ! ๊ทธ๋์ GROUP BY ์ดํ์ HAVING ์กฐ๊ฑด์ ์ ๊ฑธ์ด์ค
๐ป