[SQL-์ค๋ผํด] ๊ทธ๋ฃน ํจ์
๊ทธ๋ฃน ํจ์
- ํ ์ด๋ธ์ ์ ์ฒด ํ์ ํ๋ ์ด์์ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ๊ทธ๋ฃน๋ณ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํจ์
- ๊ทธ๋ฃนํจ์๋ ํต๊ณ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋๋ฐ ์์ฃผ ์ฌ์ฉ
select ์นผ๋ผ๋ช
, ๊ทธ๋ฃนํจ์(์นผ๋ผ๋ช
)
from ํ
์ด๋ธ๋ช
[where ์กฐ๊ฑด]
[group by ๊ทธ๋ฃน_์ปฌ๋ ด๋ช
|ํํ์]
[having ๊ทธ๋ฃน_์กฐ๊ฑด]
โช group by : ์ ์ฒด ํ์ ๊ทธ๋ฃน_์ปฌ๋ ด๋ช |ํํ์์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ
โช having : group by์ ์ ์ํด ์์ฑ๋ ๊ทธ๋ฃน๋ณ๋ก ์กฐ๊ฑด ๋ถ์ฌ
๊ทธ๋ฃน ํจ์ ์ข ๋ฅ
์ข ๋ฅ | ์๋ฏธ |
COUNT | ํ์ ๊ฐ์ ์ถ๋ ฅ |
MAX | NULL ์ ์ธํ ๋ชจ๋ ํ์์ ์ต๋๊ฐ |
MIN | NULL ์ ์ธํ ๋ชจ๋ ํ์์ ์ต์๊ฐ |
SUM | NULL ์ ์ธํ ๋ชจ๋ ํ์ ํฉ๊ณ |
AVG | NULL ์ ์ธํ ๋ชจ๋ ํ์ ํ๊ท ๊ฐ |
STDDEV | NULL ์ ์ธํ ๋ชจ๋ ํ์ ํ์คํธ์ฐจ |
VARIANCE | NULL ์ ์ธํ ๋ชจ๋ ํ์ ๋ถ์ฐ๊ฐ |
GROUPING | ํด๋น ์นผ๋ผ์ด ๊ทธ๋ฃน์ ์ฌ์ฉ๋์๋์ง ์ฌ๋ถ๋ฅผ 1 ๋๋ 0์ผ๋ก ๋ฐํ |
GROUPING SETS | ํ ๋ฒ์ ์ง์๋ก ์ฌ๋ฌ ๊ฐ์ ๊ทธ๋ฃนํ ๊ฐ๋ฅ |
COUNT ํ ๊ฐ์
- ํ ์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ ๊ฐ์๋ฅผ ๋ฐํ
- count(*) : null ํฌํจ ์ ์ฒด ํ ๊ฐ์
- count(์นผ๋ผ๋ช ) : null ์ ์ธํ ์ ์ฒด ํ ๊ฐ์ (์ค๋ณต๊ฐ ํฌํจ)
count({*|[distinct all] expr})
โช ' * '์ NULL์ ํฌํจํ ๋ชจ๋ ํ์ ๊ฐ์
โช DISTINCT ์ค๋ณต๋๋ ๊ฐ์ ์ ์ธํ ํ์ ๊ฐ์
โช ALL ์ค๋ณต๋๋ ๊ฐ์ ํฌํจํ ํ์ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ)
โช expr ์ธ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ํ์ : char, varchar2, number, date
AVG ํ๊ท , SUM ํฉ๊ณ
- ์ธ์๋ก ์ง์ ๋ ์นผ๋ผ์ ๋ํด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ ์ค์์ NULL ์ ์ธํ ํ๊ท ๊ณผ ํฉ๊ณ
- ์ซ์ ๋ฐ์ดํฐ ํ์ ๋ง ์ฌ์ฉ ๊ฐ๋ฅ
avg([distinct|all] ์ซ์๋ก๋์นผ๋ผ) # ํ๊ท
sum([distinct|all] ์ซ์๋ก๋์นผ๋ผ) # ํฉ๊ณ
MAX ์ต๋, MIN ์ต์
- ์ธ์๋ก ์ง์ ๋ ์นผ๋ผ์ ๋ํด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ ์ค์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ
- ๋ฌธ์ ๋ฐ์ดํฐ ํ์ ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
STDDEV ํ์คํธ์ฐจ, VARIANCE ๋ถ์ฐ
- ์ธ์๋ก ์ง์ ๋ ์นผ๋ผ์ ๋ํด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ ๋์์ผ๋ก ํ์คํธ์ฐจ, ๋ถ์ฐ
- ์ซ์ ๋ฐ์ดํฐ ํ์ ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- NULL์ ์ฐ์ฐ์์ ์ ์ธ
๋ฐ์ดํฐ ๊ทธ๋ฃน ์์ฑ
GROUP BY์
- ํน์ ์นผ๋ผ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ ์ด๋ธ์ ์ ์ฒด ํ์ ๊ทธ๋ฃน๋ณ๋ก ๋๋๊ธฐ ์ํ ์
- GROUP BY ์ ์ ๋ช ์๋์ง ์์ ์นผ๋ผ์ ๊ทธ๋ฃนํจ์์ ํจ๊ป ์ฌ์ฉํ ์ ์์
GROUP BY์ ์ ์ฉ ๊ท์น
- ๊ทธ๋ฃนํ ์ ์ WHERE์ ์ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน ๋์ ์งํฉ์ ๋จผ์ ์ ํ
- GROUP BY์ ์๋ ๋ฐ๋์ ์นผ๋ผ ์ด๋ฆ์ ํฌํจํด์ผ ํ๋ฉฐ, ์นผ๋ผ ๋ณ๋ช ์ ์ฌ์ฉํ ์ ์์
- SELECT์ ์์ ๋์ด๋ ์นผ๋ผ ์ด๋ฆ์ด๋ ํํ์์ GROUP BY์ ์์ ๋ฐ๋์ ๋ช ์๋์ด์ผ ํจ
(GROUP BY์ ์ ๋ช ์๋ ์นผ๋ผ์ด SELECT์ ์ ์๋ ๊ฒ์ ๊ฐ๋ฅ)
๋จ์ผ ์นผ๋ผ ๊ทธ๋ฃนํ
- GROUP BY ์ ์ ํ๋์ ์นผ๋ผ
๋ค์ค ์นผ๋ผ ๊ทธ๋ฃนํ
- GROUP BY ์ ์ ํ๋ ์ด์์ ์นผ๋ผ์ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน์ ๋๋๊ณ , ๊ทธ๋ฃน๋ณ๋ก ๋ค์ ์๋ธ๊ทธ๋ฃน ๋๋
ex) group by (deptno, postion) ์ ์ฒด ๊ต์๋ฅผ ํ๊ณผ๋ณ๋ก ๋จผ์ ๊ทธ๋ฃนํํ ๋ค์, ํ๊ณผ๋ณ ๊ต์๋ฅผ ์ง๊ธ๋ณ๋ก ๋ค์ ๊ทธ๋ฃนํ ํ๋ ๊ฒฝ์ฐ
ROLLUP, CUBE ์ฐ์ฐ์
> ROLLUP ์ฐ์ฐ์
- GROUP BY ์ ์ ๊ทธ๋ฃน์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ฒด ํ์ ๊ทธ๋ฃนํํ๊ณ ๊ฐ ๊ทธ๋ฃน์ ๋ํด ๋ถ๋ถํฉ์ ๊ตฌํ๋ ์ฐ์ฐ์
- GROUP BY ์ ์ ์นผ๋ผ์ ์๊ฐ N๊ฐ์ด๋ฉด ROLLUP์ ๊ทธ๋ฃนํ ์กฐํฉ์ N+1๊ฐ
select ์นผ๋ผ๋ช
, ๊ทธ๋ฃนํจ์(์นผ๋ผ๋ช
)
from ํ
์ด๋ธ
[where ์กฐ๊ฑด]
[group by rollup(๊ทธ๋ฃน_์นผ๋ผ๋ช
|ํํ์)]
[having ๊ทธ๋ฃน_์กฐ๊ฑด]
> CUBE ์ฐ์ฐ์
- ROLLUP์ ์ํ ๊ทธ๋ฃน ๊ฒฐ๊ณผ์ GROUP BY ์ ์ ๊ธฐ์ ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ทธ๋ฃน ์กฐํฉ์ ๋ง๋๋ ์ฐ์ฐ์
- GROUP BY์ ์ ์นผ๋ผ์ ์๊ฐ N๊ฐ์ด๋ฉด CUBE ๊ทธ๋ฃนํ ์กฐํฉ์ 2N๊ฐ
select ์นผ๋ผ๋ช
, ๊ทธ๋ฃนํจ์(์นผ๋ผ๋ช
)
from ํ
์ด๋ธ
[where ์กฐ๊ฑด]
[group by cube(๊ทธ๋ฃน_์นผ๋ผ๋ช
|ํํ์)]
[having ๊ทธ๋ฃน_์กฐ๊ฑด]
GROUPING ํจ์
- ์ธ์๋ก ์ง์ ๋ ์นผ๋ผ์ด ROLLUP์ด๋ CUBE ์ฐ์ฐ์๋ก ์์ฑ๋ ๊ทธ๋ฃน ์กฐํฉ์์ ์ฌ์ฉ๋์๋์ง ์ฌ๋ถ๋ฅผ 1 ๋๋ 0์ผ๋ก ๋ฐํ
- ์ฌ์ฉํ๋ฉด 0, ์๋๋ฉด 1
- grouping ํจ์์ ์ฌ์ฉ๋๋ ์ธ์๋ group by ์ ์ ์ง์ ๋ ์นผ๋ผ ์ค ํ๋์ฌ์ผ ํจ
select ์นผ๋ผ๋ช
, ๊ทธ๋ฃนํจ์(์นผ๋ผ๋ช
), grouping(์นผ๋ผ๋ช
)
from ํ
์ด๋ธ
[where ์กฐ๊ฑด]
[group by [rollup|cube] ๊ทธ๋ฃน_์นผ๋ผ๋ช
|ํํ์]
[having ๊ทธ๋ฃน_์กฐ๊ฑด]
GROUPING SETS ํจ์
- GROUP BY์ ์์ ๊ทธ๋ฃน ์กฐ๊ฑด์ ์ฌ๋ฌ ๊ฐ ์ง์ ํ ์ ์๋ ํจ์
- ๊ฐ ๊ทธ๋ฃน ์กฐ๊ฑด์ ๋ํด ๋ณ๋๋ก GROUP BYํ ๊ฒฐ๊ณผ๋ฅผ UNION ALL ํ ๊ฒฐ๊ณผ์ ๋์ผ
select ์นผ๋ผ๋ช
, ๊ทธ๋ฃนํจ์(์นผ๋ผ๋ช
), grouping(์นผ๋ผ๋ช
)
from table
[where ์กฐ๊ฑด]
[group by [rollup|cube] ๊ทธ๋ฃน_์นผ๋ผ๋ช
|ํํ์]
[grouping sets(์นผ๋ผ๋ช
, ์นผ๋ผ๋ช
, ...), ...]
[having ๊ทธ๋ฃน_์กฐ๊ฑด]
โช ๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๊ฐ์ ๊ทธ๋ฃน ์กฐ๊ฑด ์ง์ ๊ฐ๋ฅ
HAVING์
- GROUP BY์ ์ ์ํด ์์ฑ๋ ๊ทธ๋ฃน์ ๋์์ผ๋ก ์กฐ๊ฑด์ ์ ์ฉ (where์ ์ from์ ์์ ์ง์ ๋ ํ ์ด๋ธ ์ ์ฒด ๋์)
- HAVING์ ์ ์คํ ๊ณผ์
- ํ ์ด๋ธ์์ WHERE์ ์ ์ํด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ ์งํฉ ์ ํ
- ํ ์งํฉ์ GROUP BY์ ์ ์ํด ๊ทธ๋ฃนํ
- HAVING์ ์ ์ํด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน ์ ํ
- ๋ด๋ถ ์ ๋ ฌ ๊ณผ์ ์ ์ํด ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ ์งํฉ์ ๋ํด ๊ฒ์ ์กฐ๊ฑด ์คํ
- where์ ๊ทธ๋ฃนํํ๊ธฐ ์ ์ ๋จผ์ ๊ฒ์ ์กฐ๊ฑด ์คํ -> ๊ทธ๋ฃนํํ๋ ํ ์งํฉ ์ค์ฌ์ ๋ด๋ถ ์ ๋ ฌ ์๊ฐ ๋จ์ถ
- where์ ์์๋ ๊ทธ๋ฃนํจ์ ์ฌ์ฉ ๋ถ๊ฐ(์์ง groupํ ์ด๋ฃจ์ด์ง์ง ์์)
select ์นผ๋ผ๋ช
, ๊ทธ๋ฃนํจ์(์นผ๋ผ๋ช
)
from ํ
์ด๋ธ
[where ์กฐ๊ฑด]
[group by ๊ทธ๋ฃน_์นผ๋ผ๋ช
|ํํ์]
[having ๊ทธ๋ฃน_์กฐ๊ฑด]
[order by ์นผ๋ผ๋ช
]
ํจ์์ ์ค์ฒฉ
- SQL ํจ์ ์ฌ๋ฌ ๊ฐ์ SQL ํจ์ ์ค์ฒฉ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ค์ฒฉ๋ ํจ์ ์ฒ๋ฆฌ ์์
- ๋งจ ์์ชฝ ํจ์๋ถํฐ ์ฒ๋ฆฌํ ํ, ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ๊นฅ์ชฝ ํจ์์ ๋๊น
- ํจ์์ ๋ํ ์ค์ฒฉ ๋ ๋ฒจ ์ ํ ์์ ( ์ค๋ฌด์์๋ 3~4 ์ ๋๊ฐ ์ ๋น )
์ฐธ๊ณ ๋์ : ์ค๋ผํด ์ค์ฌ์ SQL๋ฐฐ์ํฐ, ์ฐ์ฉํ ์ธ ๊ณต์ , ์๋ฅ์ถํ์ฌ, 2007๋