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 |