- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Tableau
- 네이버웹툰
- 4LS
- 채용공고
- SQL
- 특정차원
- 살짝보기
- 데이터 분석
- python연동
- TWBX 7기
- 퀵테이블계산
- SQL캠프
- 데이터분석
- 대시보드 체크리스트
- 아니시에이팅
- IF()
- pmset
- 리텐션
- NULL값 있는 컬럼 정렬하기
- mysql
- SQL캠프입문반
- 고객세분화분석
- 데이터리안 세미나
- 재귀쿼리
- 대시보드
- TWBX
- 데이터분석가
- 데이터리안
- GROUP BY와 NULL
- 태블로
ThinkCatLog
[SQL] GROUP BY는 NULL을 어떻게 처리할까? 본문
목차
GROUP BY
HAVING
• WHERE과 HAVING의 차이
• 예약어 동작 순서
NULL 처리 방식
GROUP BY
GROUP BY는 그룹별 총합 또는 평균값등을 계산할 때 사용되며, 주로 SUM, AVG, COUNT 등의 함수와 함께 사용된다.
다음과 같이 Netflix에 올라온 작품들의 정보를 모아둔 Netflix 테이블이 있다. date_added는 해당 작품이 Netflix에 추가된 날짜를 말한다.
SELECT EXTRACT(YEAR FROM date_added) AS added_year
, COUNT(*)
FROM Netflix
GROUP BY added_year
HAVING
HAVING 은 GROUP BY 구문 이후 사용되는 예약어로, WHERE처럼 작동한다. 아래 쿼리는 2015년 이후로 Netflix에 추가된 작품의 갯수를 출력하는 쿼리이다.
SELECT EXTRACT(YEAR FROM date_added) AS added_year
, COUNT(*)
FROM Netflix
GROUP BY added_year
HAVING added_year >= 2015
WHERE과 HAVING의 차이
WHERE과 HAVING 은 차이가 존재한다. WHERE 은 보통 GROUP BY 를 적용하기 전 테이블을 필터링 할 때 사용되며, HAVING 은 보통 GROUP BY 를 한 테이블을 필터링 할 때 사용된다.
아래 쿼리는 release_year가 2015년 이후 작품 중에, 추가된 작품 갯수가 1000개 이상인 연도를 추출하는 쿼리이다. release_year가 2015년인 작품은 GROUP BY 를 적용하기 전에 WHERE을 이용하여 필터링 하였고, 그 후 GROUP BY를 이용하여 넷플릭스에 추가된 연도별로 추가된 작품의 갯수를 세었다. 그 후 HAVING을 이용하여 추가된 작품 갯수가 1000개 이상인 연도에 대해서만 추출하였다.
SELECT EXTRACT(YEAR FROM date_added) AS added_year
, COUNT(*)
FROM Netflix
WHERE release_year >= 2015
GROUP BY added_year
HAVING COUNT(*) >= 1000
예약어 동작 순서
예약어는 FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT 순으로 실행된다. MySQL에서는 SELECT의 Alias를 GROUP BY와 HAVING에서 사용할 수 있지만, 다른 DBMS에서는 사용할 수 없는 경우가 있다.
Oracler과 SQL Server에서는 Alias를 사용할 수 없지만 MySQL에서만 예외적으로 사용할 수 있다.
NULL 처리 방식
GROUP BY를 할 때, 컬럼에 NULL값이 있으면 NULL값을 가진 행을 하나의 그룹으로 묶어서 집계한다.
제품의 대한 정보를 나타낸 product_info 테이블이 있다. 4번째 행과 9번째 행의 Category 컬럼값은 NULL이다.
Category별 평균 Price값을 집계하는 쿼리이다. 결과는 오른쪽과 같다. NULL값끼리 하나의 그룹을 만들어서 값을 집계한다.
SELECT Category
, AVG(Price)
FROM product_info
GROUP BY Category
SQL 공부한 내용을 정리하기 위해 작성하는 글입니다. 아래의 데이터를 python을 이용하여 SQL에 저장하여 실습에 사용하였습니다.
작업환경
MySQL Server 8.2.0
MySQL Workbench 8.0.34
Python 3.11.2
사용한 데이터 : Netflix Movies and TV Shows(kaggle)
데이터 출처 :https://www.kaggle.com/datasets/shivamb/netflix-shows
Netflix Movies and TV Shows
Listings of movies and tv shows on Netflix - Regularly Updated
www.kaggle.com
참고
NULL Values and the GROUP BY Clause
[StackOverflow] SQL - using alias in Group By
Difference between Where and Having Clause in SQL
'데이터 분석 > SQL' 카테고리의 다른 글
[SQL] Pivot Table : 피벗 테이블 (1) | 2024.02.06 |
---|---|
[SQL] CASE와 IF() (1) | 2024.01.24 |
[SQL] ORDER BY를 했을때 NULL이 있으면 어떻게 정렬될까? (2) | 2024.01.15 |
[SQL] WHERE문과 BETWEEN, IN, LIKE 그리고 서브쿼리 (1) | 2024.01.10 |
[SQL] SELECT로 데이터 가져오기 (0) | 2024.01.09 |