PengTory

GROUPING - GROUP BY 와 HAVING(feat. oracle) 본문

데이터베이스

GROUPING - GROUP BY 와 HAVING(feat. oracle)

펭토리 2023. 2. 23. 10:23

1. GROUP BY

'~ 별로' 라는 말이 나오면 거의 Goup By를 사용한다고 생각하면 된다.

값이 같은 행끼리 묶어서 그룹화 하는 것

 

(전공별 학생 수 출력)

SELECT major1, COUNT(*) FROM student
GROUP BY major1;

 

(부서별로 직책에 있는 사람이 몇명인지)

SELECT deptno, job, COUNT(*) FROM emp
GROUP BY deptno, job

(실행 순서)

아래와 같은 경우에서는 오류가 난다. 이유는 alias를 통해 만들어진 cnt가 where문보다 늦게 실행되기 때문에 where문은 cnt가 무엇인지 모르기 때문이다.

SELECT job, COUNT(*) as cnt FROM emp
where cnt = 2
GROUP BY job
ORDER BY cnt desc, job desc;

 

ROLLUP: 하위 합계 생성

중간중간에 아래처럼 하위 합계가 추가된 것을 볼 수 있다.

SELECT deptno, job, SUM(salary)
FROM emp GROUP BY ROLLUP(deptno, job);

CUBE: 결합 가능한 모든 그룹핑(모든 조합의 수)

부서와 직급 조합별 합계를 보여준다.

SELECT deptno, job, SUM(salary)
FROM emp GROUP BY CUBE(deptno, job);

모든 조합이기 때문에 위 경우 이외에도 더 많음

GROUPING SETS: 컬럼별 벌도 처리

부서별, 직업별 별도 합계를 보여준다.

SELECT deptno, job, SUM(salary)
FROM emp GROUP BY GROUPING SETS(deptno, job);

 

2. HAVING

GROUP BY 결과의 조건을 지정할 때 사용

GROUP BY 한 후 결과의 조건을 주는것!

SELECT major1, AVG(height) FROM student
GROUP BY major1
HAVING AVG(height) >= 170;
SELECT major1, AVG(height) FROM student
WHERE height >= 170
GROUP BY major1;

두 개의 결과가 다르다. 왜냐햐면 첫번째는 Group By를 한 상태로 확인한 평균 키에서 170이 넘는 것을 확인하지만, 두번째는 먼저 WHERE문을 통해 170이 넘는 학생들을 기준으로 평균을 내기 때문에 결과가 다르다

 

'데이터베이스' 카테고리의 다른 글

SQL 학습 정리  (0) 2023.02.24
JOIN이란? (feat. oracle)  (0) 2023.02.23
Oracle 리스너란?  (0) 2023.02.22
SQL (feat. Oracle)  (0) 2023.02.22
데이터베이스 이론  (0) 2023.02.21