일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CJ UNIT
- 백준
- 시나공
- kotlin
- 백준알고리즘
- 코딩교육봉사
- 스프링
- 문제풀이
- 1과목
- 공부일지
- MYSQL
- 자바
- 데이터베이스
- 소프티어
- programmers
- 코틀린
- C++
- java
- 파이썬
- SQL
- 백준 알고리즘
- BFS
- softeer
- 알고리즘
- 코딩봉사
- 회고
- 정보처리산업기사
- 프로그래머스
- python
- SW봉사
- Today
- Total
JIE0025
[MSSQL] GROUP BY, HAVING 이해하기 본문
개별 조회 : 행을 각각 조회하는 것
집계 조회 : 결과 행들을 그룹 단위로 집계해서 조회하는것
- 여러개의 행이 한개의 그룹으로 묶일 수 있을 떄 묶어서 집계한 결과를 조회함.
- GROUP BY와 HAVING 쿼리 사용.
행 각각이 아닌 그룹핑을 하여 조회하는 것이다.
orderid | empid |
1 | 1 |
2 | 1 |
3 | 1 |
위의 테이블을 보며 이해해보자
위 테이블에 존재하는 행의 개수는 3개이다.
다음 명령어를 실행했을 때,
SELECT empid
FROM Sales.Orders
GROUP BY empid 를 진행하면
결과로 출력되는 행은 1개이다
empid로 구분하여 행들을 출력하라는 의미!
< GROUP BY 첫번째 예제 >
sales.orders테이블로부터
고객 ID가 71번인 것의 주문 건수(행) 중에 , empid와 orderdate로 그룹핑을하고, 그룹핑된 행에 COUNT(*) 총 주문 건수가 1보다 큰 것들만 조회하라는 이야기이다.
쿼리 결과를 쉽게 이해하기 위해 ORDER BY empid 를 함께 조회했다.
쿼리 결과를 살펴보자
행별로 그룹1, 그룹2, 그룹3이다.
- orderID 1,2,3이라는 말은 주문건이 각년도에 1건,2건,3건이라는 뜻이다.
- 고객id 71번이 empid 1번 직원에게 2006년에 1건, 2007년에 2건, 2008년에 3건 주문한것이다.
HAVING
HAVING 은 GROUP의 필터링 조건을 주는 것이다.
GROUP BY 사용시 사용하는 column이 SELECT 절에 그대로 들어가면 상관 없지만,
그룹 바이 요소로 사용하지 않는 column을 select절에 다이렉트로 들어갈 수 없다.
>> 집계함수를 사용해야만 한다. SUM, COUNT, YEAR 등
GROUP BY는 집계 조회를 위한 것이기 떄문에 SELECT에서 사용하는 조회 요소들도 집계 요소가 되어야 한다는 뜻!
HAVING의 특징
- TRUE로평가되는 그룹들만 필터링 한 후 다음 논리적 프로세싱 단계로 전송한
- FALSE나 UNKNOW으로 평가되는 그룹들은 제거된다.
- HAVING절은 행들이 그룹핑된 다음에 처리되기 때문에 집계함수를 사용할수있다
<GROUP BY 2번쨰 예제>
명령어에서 YEAR(orderdate)를 없애보았다.
empid에 따른 고객71번의 주문 건수가 나올것을 예상 할 수 있다.
'Application > Database' 카테고리의 다른 글
[MSSQL] TOP filter 와 정렬(ASC,DESC) (0) | 2021.04.07 |
---|---|
[MSSQL] SELECT, MSSM 관련 개념 (0) | 2021.04.07 |
[MSSQL] SQL 쿼리 기초이론, 제약조건 (0) | 2021.03.31 |
[MSSQL] SQL 서버와 SSMS(관리도구) 설치, 데이터베이스 테이블 생성 (0) | 2021.03.11 |
[SQL] database 기본 문법 (0) | 2020.02.06 |