* SELECT๋ฌธ ํด์ ์์
- GROUP BY๊ตฌ๋ฌธ์ NULL ๊ฐ์ด ์กด์ฌํ๋ ROW๋ ์ ์ธํ๊ณ ์ฐ์ถ, WHERE์ ๋จผ์ ์ํ ํ ์คํ (๊ทธ๋ฃน๋ณ ์ง๊ณ)
: ๋ํ GROUP BY ๋ค์ ์ค๋ ์์ฑ๋ช ์ ๋ฐ๋์ SELECT๋ฌธ์ ์ฐพ๋ ์์ฑ ์ค์ ์กด์ฌํด์ผํจ.
: ์๋์ฐํจ์์ ์ ๋ ํจ๊ป ์ฌ์ฉํ ์ ์์
- HAVING ๊ตฌ๋ฌธ์ GROUP BY์ ๋ํ ์กฐ๊ฑด์์ ์์ ํ๊ธฐ ์ํ ๊ฒ
* ๋ฐ์ดํฐ ๋ถ์ ํจ์๋?
: ์ดํฉ, ํ๊ท ๋ฑ ๋ฐ์ดํฐ ๋ถ์์ ์ํด ๋ณต์ํ ๊ธฐ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ ๋ค์คํ ํจ์
: ๋ณต์ํ์ ๊ทธ๋ฃน๋ณ๋ก ๋ฌถ์ด ๊ทธ๋ฃน๋น ๋จ์ผ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ
1. ์ง๊ณํจ์(Aggragate Function)
: ์ฌ๋ฌ ํ ๋๋ ํ ์ด๋ธ ์ ์ฒด ํ์ผ๋ก๋ถํฐ ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํ
: NULL๊ฐ์ ์ ์ธํ๊ณ ์ง๊ณ
์ง๊ณํจ์ : (์ปฌ๋ผ๋ช )๊ธฐ์ | ์ค๋ช |
COUNT(*) | ๋ณต์ ํ์ ROW ๊ฐ์ |
SUM(*) | ๋ณต์ ํ์ ํด๋น ์ปฌ๋ผ๊ฐ ํฉ๊ณ |
AVG(*) | ๋ณต์ ํ์ ํด๋น ์ปฌ๋ผ๊ฐ ํ๊ท |
MAX(*) | ๋ณต์ ํ์ ํด๋น ์ปฌ๋ผ๊ฐ ์ต๋๊ฐ |
MIN(*) | ๋ณต์ ํ์ ํด๋น ์ปฌ๋ผ๊ฐ ์ต์๊ฐ |
STDDEV(*) | ๋ณต์ ํ์ ํด๋น ์ปฌ๋ผ๊ฐ ํ์คํธ์ฐจ |
VARIAN(*) | ๋ณต์ ํ์ ํด๋น ์ปฌ๋ผ๊ฐ ๋ถ์ฐ |
2. ๊ทธ๋ฃนํจ์(Group Function)
: ๊ทธ๋ฃน๋ณ ์๊ณ ๋ฐ ์ค๊ณ ๋ฑ ์ค๊ฐ ํฉ๊ณ ๋ถ์ ๋ฐ์ดํฐ ์ฐ์ถ
: GROUP BY ์ ํ์ & GROUP BY ์ ๋ค์ ์์น โจ ํ๋ ์ด์์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ปฌ๋ผ๊ฐ์ ๋ฐ๋ผ ๊ทธ๋ฃนํ ํ์ฌ ๊ทธ๋ฃน๋ณ๋ก ์ถ๋ ฅ
: SELECT ๋ฌธ ๋ค์ ๋์ค๋ ์ปฌ๋ผ๋ช ์ ๋ฐ๋์ GROUP BY(์ง๊ณ๋์์๋๊ฒฝ์ฐ) ๋๋ ๊ทธ๋ฃนํจ์ ๋ค(์ง๊ณ๋์)์ ํฌํจ๋์ด์์ด์ผ ํ๋ค.
โก๏ธ ๋จ์ ์ปฌ๋ผ๋ช ๋ง! ์ง๊ณํจ์ ๋ฑ์ ๋ฏธํฌํจ!
ROLLUP | ์ปฌ๋ผ ๊ฐ ์์์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ ์ถ๋ ฅ |
์ฃผ์ด์ง ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน๋ณ ์๊ณ ๊ตฌํจ |
CUBE | ์ฃผ์ด์ง ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ์กฐํฉ์ ๊ทธ๋ฃน๋ณ ์๊ณ๋ฅผ ๊ตฌํจ | |
GROUPING SETS | ์ปฌ๋ผ ๊ฐ ์์์ ๋ฌด๊ดํ ๊ฒฐ๊ณผ ์ถ๋ ฅ |
์ฃผ์ด์ง ์ปฌ๋ผ๋ค์ ๋ํ ๋ค์ํ ์๊ณ ์งํฉ์ ๊ตฌํ๋ ํจ์ |
-- ๋ถ์๋ณ-์ง์๋ณ ๊ทธ๋ฃนํ > ์๊ณ๋ ๋ถ์๋ณ๋ก ์ด๊ณ ํ ์ ์ฒดํฉ๊ณ
SELECT DEPT, JOB SUM(SALRARY) FROM DEPT_SAL
GROUP BY ROLLUP(DEPT, JOB)
-- ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ์กฐํฉ์ ๋ํ ์ง๊ณ
-- ์ฆ : ๋ถ์๋ฉธ, ์ง๊ธ๋ณ, ๋ถ์-์ง๊ธ๋ณ ๋ชจ๋ ์ง๊ณ ์ฐ์ถ
SELECT DEPT,JOB,SUM(SALARY) FROM DEPT_SAL
FROM EMP
GROUP BY CUBE(DEPT,JOB);
-- ์ปฌ๋ผ๋ณ ๊ฐ๋ณ์ง๊ณ : ๋ถ์๋ณ๋ก ์ง๊ธ๋ณ๋ก ๋์ ํฉ๊ณ๊ฐ ์๋ ~๋ณ.
SELECT DEPT,JOB,SUM(SALARY)
FROM DEPT_SAL
GROUP BY GROUPING SETS(DEPT,JOB);
3. ์๋์ฐํจ์(Window Function)
: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์จ๋ผ์ธ ๋ถ์์ฒ๋ฆฌ ์ฉ๋ โก๏ธ OLAP(Online Analytical Processing)ํจ์
: GROUP BY์ ์ฌ์ฉ ๋ถ๊ฐ โก๏ธ PARTITION BY๋ก ๊ตฌ๊ฐ ์ค์ ํ์ฌ ์ฌ์ฉ
: PARTITION BY๋ GROUP BY์ ๊ฐ์ ์ง์ฝ๊ธฐ๋ฅ์ด ์๊ธฐ๋๋ฌธ์ ๋ ์ฝ๋๊ฐ ์ค์ด๋ค์ง ์์. ๊ทธ์ ํจ์ ์ ์ฉ ๋ฒ์๋ฅผ ๋ฌถ๋ ์ญํ
: ์๋์ฐ ํจ์๋ ๋ฐ๋์ OVER๊ณผ ํจ๊ป ์ฌ์ฉ
SELECT ํจ์๋ช
(ํ๋ผ๋ฏธํฐ)
OVER ([PARTITION BY ์ปฌ๋ผ, .. ])
[ORDER BY ์ปฌ๋ผ, .. ]
FROM ํ
์ด๋ธ๋ช
1) ์์ํจ์
: ์๊ดํธ ์์ ์ปฌ๋ผX, ์์๋ฅผ ์ ํ๋ ค๋ ์ปฌ๋ผ์ ORDER BY์ ๊ธฐ์
-- RANK() : ๋์ผ ์์ ์กด์ฌ์ ํ์์ ๋์ด๊ฐ
-- DENSE_RANK() : ๋์ผ ์์ ์กด์ฌ์์๋ ํ์์ ๋์ด๊ฐ์ง์์
-- ROW_NUMBER() : ์ฐ์๋ฒํธ๋ถ์ฌ โจ ๋์ผ ์์ ์์
SELECT NAME, SALARY,
RANK() OVER (ORDER BY SALARY DESC),
DENSE_RANK() OVER(ORDER BY SALARY DESC),
ROW_NUMBER() OVER(ORDER BY SALARY DESC)
FROM EMPLOYEE;
2) ํ์์ํจ์
: ์ถ๋ ฅ ๋์์ ํ๋ผ๋ฏธํฐ์ ๊ธฐ์ , ์์๋ฅผ ์ ํ๋ ค๋ ์ปฌ๋ผ์ ORDER BY์ ๊ธฐ์
: PARTITION BY ์๋ต์ ์ ์ฒด ์ปฌ๋ผ ๋์
-- FIRST_VALUE(์ถ๋ ฅ๋์) : ํํฐ์
๋ณ ์๋์ฐ์์ ๊ฐ์ฅ ๋จผ์ ๋์ค๋ ๊ฐ์ ์ฐพ์
-- LAST_VALUE(์ถ๋ ฅ๋์) : ํํฐ์
๋ณ ์๋์ฐ์์ ๊ฐ์ฅ ๋์ค์ ๋์ค๋ ๊ฐ์ ์ฐพ์
-- LAG(์ถ๋ ฅ๋์) : ํํฐ์
๋ณ ์๋์ฐ์์ ์ด์ ๋ก์ฐ๊ฐ ๋ฐํ
-- LEAD(์ถ๋ ฅ๋์) : ํํฐ์
๋ณ ์๋์ฐ์์ ๋ค์ ๋ก์ฐ๊ฐ ๋ฐํ
SELECT NAME, SALARY,
FIRST_VALUE(NAME) OVER(ORDER BY SALARY DESC),
LAST_VALUE(NAME) OVER(ORDER BY SALARY DESC),
LAG(NAME) OVER(ORDER BY SALARY DESC),
LEAD(NAME) OVER(ORDER BY SALARY DESC),
FROM EMPLOYEE;
3) ๊ทธ๋ฃน๋ด๋น์จํจ์
-- RATIO_TO_REPORT : ์ฃผ์ด์ง ๊ทธ๋ฃน์ ํฉ์๋ํด ๋ก์ฐ์ ์๋์ ๋น์จ ๋ฐํ โก๏ธ 0~1 ์ฌ์ด๊ฐ ๋ฐํ
-- PERCENT_RANK : ์์์ ๋ํ ๋ฐฑ๋ถ์จ ๋ฐํ โก๏ธ 0~1 ์ฌ์ด๊ฐ ๋ฐํ - ๊ฐ์ฅ ๋จผ์ ๋์ค๋๊ฒ 0
'DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DBMS์ ์๊ธฐ์ , ORM (0) | 2020.09.09 |
---|---|
JOIN(INNER/OUTER/SELF) , 1999JOIN(CROSS,NATURAL,INNER,OUTER) (0) | 2020.09.08 |
์ ๊ทํ์ ๋ฐ์ ๊ทํ (0) | 2020.09.07 |
DB๋ชจ๋ธ๋ง, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๊ด๊ณ๋์, ๊ด๊ณํด์, DB Mapping์ฉ์ด (0) | 2020.09.07 |
๋๊ธ