[Oracle] ๐พ ๊ทธ๋ฃน ํจ์ (count, sum, avg, max, min, group by)
๊ทธ๋ฃน ํจ์
ํ๋ ์ด์์ ํ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ์ฐ์ฐํ์ฌ ํ๋์ ๊ฒฐ๊ณผ๋ก ๋ํ๋ธ๋ค. ๊ทธ๋ฃน ํจ์๋ null์ ์ ์ธํ๊ณ ๊ณ์ฐํ๋ค.
๊ทธ๋ฃน ํจ์์ ์ข ๋ฅ
-
count : ํ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
select count(comm) from emp; -- commition์ ๋ฐ๋ ์ฌ์์ ์ธ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. select count(*) from emp; -- ์ ์ฒด ์ฌ์์ ์ธ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
-
sum : ์ปฌ๋ผ ๊ฐ๋ค์ ์ด ํฉ๊ณ๋ฅผ ๊ตฌํ๋ค.
select sum(sal) from emp; -- ์ ์ฒด ์ฌ์์ ๊ธ์ฌ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ค.
-
avg : ์ปฌ๋ผ ๊ฐ๋ค์ ํ๊ท ๊ฐ์ ๊ตฌํ๋ค.
select avg(sal) from emp; -- ์ ์ฒด ์ฌ์์ ๊ธ์ฌ ํ๊ท ์ ๊ตฌํ๋ค.
-
max : ์ปฌ๋ผ ๊ฐ๋ค์ ๋ํ ์ต๋๊ฐ์ ๊ตฌํ๋ค.
select max(sal) from emp; -- ์ ์ฒด ์ฌ์์ ๊ธ์ฌ ์ค ๊ฐ์ฅ ๋์ ๊ธ์ฌ ๊ฐ์ ๊ตฌํ๋ค.
-
min : ์ปฌ๋ผ ๊ฐ๋ค์ ๋ํ ์ต์๊ฐ์ ๊ตฌํ๋ค.
select min(sal) from emp; -- ์ ์ฒด ์ฌ์์ ๊ธ์ฌ ์ค ๊ฐ์ฅ ๋ฎ์ ๊ธ์ฌ ๊ฐ์ ๊ตฌํ๋ค.
-
group by
ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ง๊ณ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด ๋ถ์๋ณ ์ธ์ ์, ํ๊ธ๋ณ ์ฑ์ ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ ๊ตฌํ ๋ ์ฌ์ฉํ ์ ์๋ค. group by ๋ค์ ๊ธฐ์ค์ด ๋๋ ์ปฌ๋ผ์ ์ ๋๋ค.``` select deptno, count(*) from emp group by deptno; -- ๋ถ์๋ณ ์ธ์ ์๋ฅผ ๊ตฌํ๋ค. ```
๊ทธ๋ฃน ํจ์๋ฅผ ์ธ ๋๋ select ๋ค์ group by ๋ค์ ์ค๋ ์ปฌ๋ผ๋ง์ ์ธ ์ ์๋ค.
select empno, count(*) from emp group by deptno; -- ์ด๋ ๊ฒ๋ ์ธ ์ ์๋ค. (์ค๋ฅ)
having
group by๋ก ์ง๊ณ๋ ๊ฐ์ where์ ๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ์ถ๊ฐํด์ผ ํ ๋ ์ฌ์ฉํ๋ค. where์ ์ด ์ ํจํ์ง ์๋ ์ด์ ๋ where์ ์ด group by์ ๋ณด๋ค ๋จผ์ ์คํ๋์ด, where์ ์ ์กฐ๊ฑด์ด group by์ ์ ์ ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ sql select ์ฟผ๋ฆฌ์ ์คํ ์์
from - on - join - where - group by - cube | rollup - having - select - distinct - order by - top
having์ ์ select ๊ธฐ์ค ์ปฌ๋ผ, ์ฐ์ฐ ๊ฐ from ํ
์ด๋ธ groub by ๊ธฐ์ค ์ปฌ๋ผ having ์กฐ๊ฑด
์ผ๋ก ์์ฑํ๋ค.
-- ์ธ์์ด 5๋ช
์ด์์ธ ๋ถ์๋ฅผ ๋์์ผ๋ก ํ๋ ๋ถ์๋ณ ํ๊ท ๊ธ์ฌ
select deptno, round(avg(sal), 0) from emp group by deptno having count(*) >= 5;
group by ์ฐ์ต ๋ฌธ์
๐ ๋ฌธ์
- ๋ถ์ ๋ฒํธ, ๋ถ์๋ช , ํ๊ท ๊ธ์ฌ๋ฅผ ๊ตฌํ์์ค.
- 'DALLAS'์์ ๊ทผ๋ฌดํ๋ ์ฌ์๋ค์ job๋ณ ํ๊ท ๊ธ์ฌ๋ฅผ ๊ตฌํ์์ค.
- ๊ธ์ฌ ๋ฑ๊ธ(grade)๋ณ ์ธ์ ์๋ฅผ ๊ตฌํ์์ค. (์ธ์ ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ)
- job๋ณ ๊ธ์ฌ ๋ฑ๊ธ์ ๊ตฌํ์์ค. (ํ๊ท ๊ธ์ฌ ๋ฑ๊ธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ)
- ๋ถ์ ๋ฒํธ, ๋ถ์๋ช
, ํ๊ท ๊ธ์ฌ, ํ๊ท ๊ธ์ฌ ๋ฑ๊ธ์ ๊ตฌํ์์ค.
์ฐ์ต์ ์ฌ์ฉํ emp ํ
์ด๋ธ, dept ํ
์ด๋ธ, salgrade ํ
์ด๋ธ์ ๋ค์๊ณผ ๊ฐ๋ค. (Oracle DB scott ๊ณ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์กด์ฌํ๋ ํ
์ด๋ธ)
๐ก ๋ต์
- ๋ด๋ถ ์กฐ์ธ์ ํ์ ๋ 40๋ฒ ๋ถ์๊ฐ ์ถ๋ ฅ๋์ง ์๋๋ค๋ ์ ์ ์ ์ํ๋ค.
select d.deptno, d.dname, nvl(round(avg(sal)), 0) as avg
from emp e right outer join dept d on e.deptno=d.deptno group by d.deptno, d.dname;
select e.job, round(avg(e.sal)) as avg
from emp e inner join dept d on e.deptno=d.deptno
where d.loc='DALLAS' group by e.job;
select s.grade, count(*) as count
from emp e inner join salgrade s on e.sal between s.losal and s.hisal group by s.grade
order by 2 desc;
select e.job, round(avg(s.grade), 1) as avg
from emp e inner join salgrade s on e.sal between s.losal and s.hisal group by e.job
order by 2 asc;
- 1๋ฒ ๋ฌธ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก 40๋ฒ ๋ถ์๊ฐ ์ถ๋ ฅ๋๊ธฐ ์ํด์๋ emp ํ ์ด๋ธ๊ณผ salgrade ํ ์ด๋ธ์ ๋จผ์ ๋ด๋ถ ์กฐ์ธํ ๊ฒฐ๊ณผ์ dept ํ ์ด๋ธ์ ์ธ๋ถ ์กฐ์ธํด ์ฃผ์ด์ผ ํ๋ค. ์ด ์์๊ฐ ๋ฐ๋๋ฉด 40๋ฒ ๋ถ์๋ ์ถ๋ ฅ๋์ง ์๋๋ค.
select d.deptno, d.dname, nvl(round(avg(e.sal), 0), 0) as sal, nvl(round(avg(s.grade), 1), 0) as grade
from emp e inner join salgrade s on e.sal between s.losal and s.hisal
right outer join dept d on e.deptno=d.deptno
group by d.deptno, d.dname;
๐ ๊ฐ๋จ ๋ฌธ๋ฒ ์ค๋ช
round(์ปฌ๋ผ, ๋ฐ์ฌ๋ฆผํ ์๋ฆฌ ๊ฐ)
์ฝ๊ฒ ๋งํด ์์์ ๋ช ์๋ฆฌ๊น์ง ์ถ๋ ฅํ ๊ฒ์ธ์ง๋ฅผ ์ ํ ์ ์๋ค. ๋ฐ์ฌ๋ฆผํ ์๋ฆฌ ๊ฐ์ ์์์ ๋ถํฐ ์์๋๋ก(์ค๋ฅธ์ชฝ์ผ๋ก) 0, 1, 2...๋ก ๋งค๊ธด๋ค. ์๋ฅผ ๋ค์ด 0์ ์ ์ผ๋ฉด ์์์ ์๋ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ์ ํ๊ธฐ ๋๋ฌธ์ ์์์ ์์ด ์ ์๋ง ์ถ๋ ฅ๋๋ค. 1์ ์ ์ผ๋ฉด ์์์ ์๋ ์ฒซ ๋ฒ์งธ ์๋ฆฌ๊น์ง ์ถ๋ ฅ๋๋ค.
nvl(์ปฌ๋ผ, null์ผ ๊ฒฝ์ฐ์ ๋ฐํ ๊ฐ)
์ค๋ผํด์์๋ง ์ ๊ณตํ๋ ํจ์์ด๋ค. null ๊ฐ์ ์ง์ ํด ๋์ ๊ฐ์ผ๋ก ์นํํด ์ค๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Oracle] ๐พ ๊ทธ๋ฃน ํจ์ (count, sum, avg, max, min, group by)), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@haramiee/Oracle-๊ทธ๋ฃน-ํจ์์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค