Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 싱글톤
- 데이터베이스
- 외부조인
- 오버라이딩
- 자바
- select
- 스프링
- 파이썬
- 쓰는이유
- 121
- 개발기록
- Spring Framework
- PYTHON
- 리스트 자르기
- null
- 싱글톤 레지스트리
- overriding
- DAO의 분리
- JIT
- ChainMap
- react
- Oracle
- GCP Storage
- 백준
- defaultdict
- orderedDict
- java
- DAO
- spring
- 청크
Archives
- Today
- Total
PengTory
GROUPING - GROUP BY 와 HAVING(feat. oracle) 본문
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 |