- ์ค๋ผํด์์๋ (1)๋ด์ฅํจ์์ ์ฌ์ฉ์๊ฐ ํ์์ ์ํด์ ์ง์ ์ ์ํ (2)์ฌ์ฉ์ ์ ์ ํจ์๋ก ๋๋์ด์ง.
- ๋จ์ผํ ํจ์์ ๋ค์คํ ํจ์(์ง๊ณ ํจ์)๋ก ๋๋์ด์ง.
SELECT ENAME, SUM(SAL)
FROM EMP;
โ ๏ธ ํด๋น ์ปค๋งจ๋๋ ์ค๋ฅ๊ฐ ๋๋ค. ์?
๐ SUM(SAL)
์ ๊ฒฐ๊ณผ๊ฐ ํ๋๋ง ๋์ค๋๋ฐ(SAL ํญ๋ชฉ์ ๋ํ ํฉ๊ณ์ด๋ฏ๋ก) ENAME
์ ๊ฐ ํ์ด ๋ค ๋์ค๊ธฐ ๋๋ฌธ
์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์ GROUP BY
๋ฅผ ์ด์ฉํด ๊ทธ๋ฃน ๋จ์๋ก ๋ฌถ์ด์ผ ํจ!
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO; -- ๊ธ์ฌ์ ๋ํ ํฉ๊ณ๋ฅผ ๋ถ์๋ณ๋ก ๋ฌถ์ด์ค.
๐ธ ์์ฉ ์์ . ์ง์ ๋ณ๋ก ๊ธ์ฌ ํฉ๊ณ, ๊ธ์ฌ ํ๊ท , ํด๋น ์ง์ ๊ตฐ์ ์ง์ ์ซ์๋ฅผ ์ถ๋ ฅ
SELECT JOB, SUM(SAL), TRUNC(AVG(SAL)), COUNT(*)
FROM EMP
GROUP BY JOB
ORDER BY AVG(SAL) DESC;
SUM ํจ์ (ํฉ๊ณ)
DISTINCT
: ์ค๋ณต ์ ๊ฑฐALL
: ์ฌ์ฉํ์ง ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ALL ํน์ฑ์ ๊ฐ์ง๋๋ค.
SELECT SUM(DISTINCT SAL) AS ์ค๋ณต์ ๊ฑฐ, -- SAL ํญ๋ชฉ ์ค ์ค๋ณต์ธ๊ฒ ์์ผ๋ฉด ์ ๊ฑฐ๋ ํ ๋ํด์ง.
SUM(ALL SAL) AS ์ ๋ถ,
SUM(SAL) AS ๊ธฐ๋ณธ
FROM EMP;
๊ธฐํ ๊ตฌ๋ฌธ
SELECT COUNT(*) FROM EMP; -- ์ ์ฒด ๋ช ๋ช
์ธ์ง( == ํ์ ์)
SELECT COUNT(COMM) FROM EMP; -- COMM์์ NULL์ด ์๋ ์ฌ์์ ์
๐ธ ๋ถ์ ๋ฒํธ๊ฐ 20์ธ ์ฌ์ ์ค ์ ์ฌ์ผ์ด ๊ฐ์ฅ ์ต๊ทผ์ธ ์ฌ์ ์ถ๋ ฅ
SELECT MAX(HIREDATE)
FROM EMP
WHERE DEPTNO = 20;
๐ธ ์ ์์ฑ ์์
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
GROUP BY
- ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ํน์ ์ด์ ๋ฌถ์ด์ ์ถ๋ ฅํ๋ ๊ฒ์ ๊ทธ๋ฃนํ ํ๋ค๊ณ ํฉ๋๋ค.
- ์ด ๋, ์ถ๋ ฅํด์ผ ํ ๋์ ์ด ์ง์ ์ GROUP BY๋ก ์ํ ํฉ๋๋ค.
SELECT TRUNC(AVG(SAL)) ํ๊ท ๊ธ์ฌ, DEPTNO
FROM EMP
GROUP BY DEPTNO;
๐ธ ๋ถ์ ๋ฒํธ ๋ฐ ์ง์ฑ ๋ณ ํ๊ท ๊ธ์ฌ๋ก ์ ๋ ฌํ๊ธฐ
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
๐ธ GROUP BY ์ ์ ์ฌ์ฉํ์ฌ ๋ถ์ ๋ฒํธ๋ณ ํ๊ท ์ถ๊ฐ ์๋น ์ถ๋ ฅ
SELECT DEPTNO, NVL(AVG(COMM),0) AS ๋ถ์๋ณํ๊ท ์๋น
FROM EMP
GROUP BY DEPTNO;
๐ธ ๋ถ์ ์ฝ๋, ๊ธ์ฌ ํฉ๊ณ, ๋ถ์ ํ๊ท , ๋ถ์ ์ฝ๋ ์ ์ ๋ ฌ
SELECT DEPTNO, SUM(SAL),
TRUNC(AVG(SAL)) AS ํ๊ท ๊ธ์ฌ,
COUNT(*) ์ธ์์
FROM EMP
GROUP BY DEPTNO
ORDER BY DEPTNO;
HAVING ์
SELECT
๋ฌธ์GROUP BY
๊ฐ ์กด์ฌํ ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ- ๊ทธ๋ฃนํ๋ ๊ฐ์ ๋ฒ์๋ฅผ ์ ํํ๋ ์ฉ๋๋ก ์ฌ์ฉ
WHERE
์ ์ ๋ชป ์ฐ๋ ์ด์ ๋GROUP BY
์WHERE
๊ฐ ์ํ๋๋ ์์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ!
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
๐ธ WHERE ์ ๊ณผ HAVING ์ ์ ๋ชจ๋ ์ฌ์ฉํ ๊ฒฝ์ฐ
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
WHERE SAL <= 2500
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
๐ธ์ฐ์ต๋ฌธ์ ๐ถ
1. HAVING์ ์ ์ฌ์ฉํ์ฌ EMP ํ ์ด๋ธ์ ๋ถ์๋ณ ์ง์ฑ ์ ํ๊ท ๊ธ์ฌ๊ฐ 500 ์ด์์ธ ์ฌ์๋ค์ ๋ถ์ ๋ฒํธ, ์ง์ฑ , ๋ถ์๋ณ ์ง์ฑ ์ ํ๊ท ๊ธ์ฌ๊ฐ ์ถ๋ ฅ
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 500
ORDER BY DEPTNO, JOB;
2. EMP ํ ์ด๋ธ์ ์ด์ฉํ์ฌ ๋ถ์๋ฒํธ, ํ๊ท ๊ธ์ฌ, ์ต๊ณ ๊ธ์ฌ, ์ต์ ๊ธ์ฌ, ์ฌ์์๋ฅผ ์ถ๋ ฅ, ๋จ, ํ๊ท ๊ธ์ฌ๋ฅผ ์ถ๋ ฅ ํ ๋๋ ์์์ ์ ์ธํ๊ณ ๋ถ์ ๋ฒํธ๋ณ๋ก ์ถ๋ ฅ
SELECT DEPTNO,
TRUNC(AVG(SAL)) AS "ํ๊ท ๊ธ์ฌ",
MAX(SAL) AS "์ต๊ณ ๊ธ์ฌ",
MIN(SAL) AS "์ต์ ๊ธ์ฌ",
COUNT(*) AS "์ฌ์ ์"
FROM EMP
GROUP BY DEPTNO
ORDER BY DEPTNO DESC;
3. ๊ฐ์ ์ง์ฑ ์ ์ข ์ฌํ๋ ์ฌ์์ด 3๋ช ์ด์์ธ ์ง์ฑ ๊ณผ ์ธ์์ ์ถ๋ ฅ
SELECT JOB, COUNT(JOB) AS ์ฌ์์
FROM EMP
GROUP BY JOB
HAVING COUNT(JOB) >= 3;
4. ์ฌ์๋ค์ ์ ์ฌ ์ฐ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ์๋ณ๋ก ๋ช ๋ช ์ด ์ ์ฌํ๋์ง ์ถ๋ ฅ
SELECT EXTRACT(YEAR FROM HIREDATE) AS ์
์ฌ์ผ,
DEPTNO,
COUNT(*) ์ฌ์์
FROM EMP
GROUP BY EXTRACT(YEAR FROM HIREDATE), DEPTNO
ORDER BY ์ฌ์์;
5. ์ถ๊ฐ ์๋น์ ๋ฐ๋ ์ฌ์ ์์ ๋ฐ์ง ์๋ ์ฌ์์๋ฅผ ์ถ๋ ฅ (O, X๋ก ํ๊ธฐ ํ์)
SELECT NVL2(COMM,'O','X') AS ์ถ๊ฐ์๋น,
COUNT(NVL2(COMM,'O','X')) AS ์ฌ์์
FROM EMP
GROUP BY NVL2(COMM,'O','X');
6. ๊ฐ ๋ถ์์ ์ ์ฌ ์ฐ๋๋ณ ์ฌ์ ์, ์ต๊ณ ๊ธ์ฌ, ๊ธ์ฌ ํฉ, ํ๊ท ๊ธ์ฌ๋ฅผ ์ถ๋ ฅ
SELECT DEPTNO,
EXTRACT(YEAR FROM HIREDATE) AS ์
์ฌ๋
๋,
COUNT(*) ์ฌ์์,
MAX(SAL) ์ต๊ณ ๊ธ์ฌ,
TRUNC(AVG(SAL)) ํ๊ท ๊ธ์ฌ,
SUM(SAL) ํฉ๊ณ
FROM EMP
GROUP BY EXTRACT(YEAR FROM HIREDATE),DEPTNO
ORDER BY DEPTNO;
'๐๏ธ Backend > Oracle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๋ผํด(Oracle) - (DQL) : ์กฐ์ธ(JOIN) (0) | 2023.02.17 |
---|---|
์ค๋ผํด(Oracle) - (DQL) : ์งํฉ ์ฐ์ฐ์ (0) | 2023.02.17 |
์ค๋ผํด(Oracle) - ๊ธฐ๋ณธ HR ๊ณ์ ์ฐ์ต ๋ฌธ์ (1) | 2023.02.16 |
์ค๋ผํด(Oracle) - (DQL) : ํจ์(๋จ์ผํ ํจ์) (2) | 2023.02.14 |
์ค๋ผํด(Oracle) - SELECT (DQL) (0) | 2023.02.13 |