GiantStepDEV
article thumbnail
  • ์˜ค๋ผํด์—์„œ๋Š” (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;
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!