1. GROUP BY ์
- ๊ทธ๋ฃนํ : ์ฌ๋ฌ ๋ฐ์ดํฐ์์ ์๋ฏธ ์๋ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ํน์ ์นผ๋ผ ๊ฐ ๋ณ๋ก ๋ฌถ์ด์ ์ถ๋ ฅ
ex) DEPTNO๊ฐ 10์ผ ๋, 20์ผ ๋, 30์ผ ๋ ๊ธ์ฌ์ ํ๊ท ๊ฐ์ ๊ตฌํ๊ณ ์ถ์ ๋ ํ๋์ฉ SQL๋ฌธ์ ์์ฑํด์ผํ์ง๋ง GROUP BY ์ ์ ์ฌ์ฉํ๋ฉด DEPTNO ๋ณ๋ก ๋ฌถ์ด์ ํ๊ท ๊ฐ์ ํ๋ฒ์ ๊ณ์ฐํ ์ ์๋ค
SELECT [์กฐํํ ์นผ๋ผ 1 ์ด๋ฆ], [์นผ๋ผ 2 ์ด๋ฆ], … , [์นผ๋ผ N ์ด๋ฆ]
FROM [์กฐํํ ํ
์ด๋ธ ์ด๋ฆ]
WHERE [์กฐํํ ์นผ๋ผ์ ์ ๋ณํ๊ธฐ ์ํ ์กฐ๊ฑด์]
GROUP BY [๊ทธ๋ฃนํํ ์นผ๋ผ์ ์ง์ (์ฌ๋ฌ๊ฐ ๊ฐ๋ฅ)]
ORDER BY [์ ๋ ฌํ๋ ค๋ ์นผ๋ผ ์ง์ ] [์ ๋ ฌ ์ต์
];
-- 1. DEPTNO ๋ณ๋ก ๊ทธ๋ฃนํ
SELECT AVG(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO;
-- 2. DEPTNO ๋ณ๋ก ๊ทธ๋ฃนํ
SELECT AVG(SAL), DEPTNO, JOB
FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
(1) DEPTNO ๋ณ๋ก SAL ์นผ๋ผ์ ํ๊ท ์ ๊ตฌํด ์ถ๋ ฅ
(2) DEPTNO, JOB ๋ณ๋ก SAL ์นผ๋ผ์ ํ๊ท ์ ๊ตฌํด DEPTNO, JOB ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅ
-> DEPTNO๊ฐ 10์ด๊ณ JOB์ด MANAGER์ธ ์ฌ๋๋ค์ SAL ํ๊ท , DEPTNO๊ฐ 20์ด๊ณ JOB์ด SALESMAN์ธ ์ฌ๋๋ค์ SAL ํ๊ท , …
2. GROUP BY ์ ์ฌ์ฉ ์ ์ ์์
- ๋ค์คํ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์์ ์ผ๋ฐ ์นผ๋ผ์ GROUP BY ์ ์ ๋ช ์ํ์ง ์์ผ๋ฉด SELECT ์ ์์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ
- ๋ค์คํ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ ํ์ผ๋ก ์ถ๋ ฅ๋์ง๋ง ์ผ๋ฐ ์นผ๋ผ์ ์ฌ๋ฌ ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ๊ฐ ์นผ๋ผ๋ณ ๋ฐ์ดํฐ ์๊ฐ ๋ฌ๋ผ์ ธ ์ถ๋ ฅ์ด ๋ถ๊ฐ๋ฅํจ
3. HAVING ์
- GROUP BY ์ ์ ์กฐ๊ฑด์ ์ค ๋ ์ฌ์ฉ. ๋ฐ๋ผ์ GROUP BY ์ ์ด ์กด์ฌํ ๋๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅ
- GROUP BY ์ ์ ํตํด ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฒ์๋ฅผ ์ ํํ๋ ๋ฐ ์ฌ์ฉ
SELECT [์กฐํํ ์นผ๋ผ 1 ์ด๋ฆ], [์นผ๋ผ 2 ์ด๋ฆ], … , [์นผ๋ผ N ์ด๋ฆ]
FROM [์กฐํํ ํ
์ด๋ธ ์ด๋ฆ]
WHERE [์กฐํํ ์นผ๋ผ์ ์ ๋ณํ๊ธฐ ์ํ ์กฐ๊ฑด์]
GROUP BY [๊ทธ๋ฃนํํ ์นผ๋ผ์ ์ง์ (์ฌ๋ฌ๊ฐ ๊ฐ๋ฅ)]
HAVING [์ถ๋ ฅ ๊ทธ๋ฃน์ ์ ํํ๋ ์กฐ๊ฑด์]
ORDER BY [์ ๋ ฌํ๋ ค๋ ์นผ๋ผ ์ง์ ] [์ ๋ ฌ ์ต์
];
-- 1.
SELECT AVG(SAL), DEPTNO, JOB
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
(1) DEPTNO, JOB ๋ณ๋ก SAL ์นผ๋ผ์ ํ๊ท ์ ๊ตฌํด DEPTNO, JOB ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ AVG(SAL)์ด 2000 ์ด์์ธ ๋๋ง ์ถ๋ ฅ
4. HAVING ์ ์ฌ์ฉ ์ ์ ์์
- WHERE ์ : ์ถ๋ ฅ ๋์ ํ์ ์ ํ / HAVING ์ : ๊ทธ๋ฃนํ ๋ ๋์์ ์ถ๋ ฅ์์ ์ ํ
- ์กฐ๊ฑด์์ ์ง์ ํ์ฌ ์กฐ๊ฑด์ด ์ฐธ์ธ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅํ๋ค๋ ์ ์์ HAVING ์ ์ด WHERE ์ ๊ณผ ๋น์ทํ๋ค๊ณ ์๊ฐํ ์ ์์ผ๋ ๋ค๋ฅด๋ค
-- 1.
SELECT AVG(SAL), DEPTNO, JOB
FROM EMP
WHERE AVG(SAL) >= 2000
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
-- 2.
SELECT AVG(SAL), DEPTNO, JOB
FROM EMP
WHERE SAL >= 2000
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
(1) ์ค๋ฅ ๋ฐ์
(2) SAL ์ด 2000 ์ด์์ธ ํ๋ง (WHERE ์ ) DEPTNO, JOB ๋ณ๋ก SAL ์นผ๋ผ์ ํ๊ท ์ ๊ตฌํด
DEPTNO, JOB ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ AVG(SAL)์ด 2000 ์ด์์ธ ๋๋ง ์ถ๋ ฅ (HAVING ์ )