DATABASE(oracleDB 11g)/SQL

[SQL]GROUP BY의 기초

SEUNGSAMI 2019. 1. 29. 14:49

GROUP BY의 기초



GROUP BY는 간단하게 '그룹을 지어라'라는 뜻이다. 좀더 말하면, 그룹으로 묶은 col만 불러올 수 있다.



다음의 예시를 보자

1
2
3
select department_id, min(salary), max(salary)
from employees
group by department_id;
cs

이경우 group by를 빼면 동작하지 않으나, department_id를 group으로 묶어줌으로써 department_id를 따로 select할 수가 있다.


다음은 잘못된 예시이다.

1
2
3
select employee_id, min(salary), max(salary)
from employees
group by department_id;
cs

이 경우 department_id를 group하였으나 employee_id 를 select하였기 때문에 오류가 발생한다.


HAVING

#having과 where을 헷갈리지 말자

having은 group화 된 group에 조건을 주는 것이다.


다음의 예시를 참고하자.

1
2
3
4
select job_id, avg(salary)
from employees
group by job_id
having avg(salary) >= 10000;
cs

이 쿼리문은 job_id를 그룹화 한 후에 salary의 평균이 10000이상인 job_id와 avg(salary)를 display 해준다.

having도 조건문인건 맞지만 having은 group by를 한 결과에 조건을 따지는 것이다.


위의 query문과 비교를 해보자.

1
2
3
4
select job_id, avg(salary)
from employees
where salary >= 10000
group by job_id;
cs

where은 group을 짓기 전에 salary가 10000이상인 것들로 group을 지어서 결과를 내는 것이다.


다음의 예시를 보자.

1
2
3
4
select department_id, job_id, avg(salary)
from employees
group by department_id, job_id
order by department_id asc;
cs

department_id를 먼저 그룹화하고 그 중에서 job_id로 그룹화를 해준다.


SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.

'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글

[SQL]조인(JOIN)의 기초-Equi join 과 Non-Equi Join  (0) 2019.01.29
[SQL] 분석 함수  (0) 2019.01.29
[SQL]집합 함수의 기초  (0) 2019.01.29
[SQL]decode와 case함수  (0) 2019.01.29
[SQL]날짜관련함수 연습문제  (0) 2019.01.29