1. Group by 해서 연산하기
- 전체 행을 세로연산 하려면 무엇을 써? - sum, max, min, count, avg(그룹함수)
- 특정 행들을 세로연산 하려면 무엇을 써? - where과 그룹함수
- 특정 그룹만 세로연산 하려면 무엇을 써? - where과 그룹함수
- 그룹별로 세로연산 하려면 무엇을 써? - group by 와 그룹함수
2. 그룹 함수
-- 세로 연산
select *
from student;
-- 1. 그룹 함수
select avg(height) -- 평균
from student;
select count(height) -- row 갯수
from student;
select sum(height) -- 더하기
from student;
select min(height) -- 가장 작은 값
from student;
select max(height) -- 가장 큰 값
from student;
3. 원하는 행만 세로 연산
-- 2. 원하는 행만 세로 연산하기
select avg(weight)
from student
where year(birthday) = 1975; -- 1975년생의 몸무게 평균
-- 정교수들의 연봉 평균
select floor(avg(pay)) "정교수들의 연봉" -- floor = 소수점 제가
from professor
where position = "정교수";
-- 학생들의 키의 평균
select avg(height)
from student;
3. 그룹핑하기 (Group by)
Union ALL 과 Group by (결과가 같다)
-- 3. 그룹핑하기
select avg(sal), deptno
from emp
where deptno = 10
union all
select avg(sal), deptno
from emp
where deptno = 20
union all
select avg(sal), deptno
from emp
where deptno = 30;
select avg(sal), deptno
from emp
group by deptno;
4. 그룹핑 원리 실습
-- 4. 그룹핑 원리 실습
select *
from student;
select avg(height), grade -- grade 학년으로 그룹핑
from student
group by grade;
--그룹핑 순서에 유의하기
select job, deptno, avg(sal) -- job을 먼저 그룹핑 한 후에, deptno 그룹핑
from emp
group by job, deptno;
5. 특정 그룹 없애기
특정한 그룹을 없애기 위해서 having을 사용해야한다. 하지만 where을 사용하여도 지금은 똑같은 결과 값이 나오지만 연산 순서가 다르기 때문에 상황에 따라 다르게 사용한다.
그룹핑 후에 where문을 사용하고 싶으면 having을 사용하면 된다.
-- group을 만든 후에 where을 사용하려면 having을 써야한다.
select job, deptno, avg(sal)
from emp
group by job, deptno
having deptno != 10; -- 10번 그룹만 지우기
select job, deptno, avg(sal)
from emp
where deptno != 10 -- 10번 그룹만 지우기
group by job, deptno;

-- 평균 연봉이 2000 이상인 부서는?
select avg(sal), deptno
from emp
group by deptno
having avg(sal) > 2000;

Share article