SELECT YEAR(sales_date)
, MONTH(sales_date)
, gender
, COUNT(DISTINCT sal.user_id)
FROM USER_INFO INF RIGHT JOIN ONLINE_SALE SAL ON INF.user_id=SAL.user_id
WHERE gender is not null
GROUP BY 1,2,3
ORDER BY 1,2,3
1. COUNT(*) 결과
중복된 아이디들이 모두 세어짐
2. COUNT( 변수명) 결과
중복된 아이디들이 모두 세어짐
NULL값이 존재하지않아서 위 결과와 같음
3. COUNT( DISTINCT 변수명) 결과
중복이 제거되고 아이디별 1로 집계됨
예제 2) 입양시간대 별 입양된 동물 수
WITH RECURSIVE HOURS (HH) AS (
SELECT 0
UNION ALL
SELECT HH + 1
FROM HOURS
WHERE HH < 23)
SELECT HH, COUNT(HOUR(O.DATETIME)) AS COUNT
FROM ANIMAL_OUTS O RIGHT OUTER JOIN HOURS H
ON HOUR(O.DATETIME) = H.HH
GROUP BY 1
ORDER BY 1
1. COUNT(*) 결과
NULL값이 있는 열이라서 모든 NULL값이 계산되어 반환됨 (HH 0 ~ HH 7 1로 집계)
2. COUNT(변수명) 결과
NULL값이 제외되면서 0으로 COUNT되고, 결과값이 있는 부분만 COUNT됨
(HH 0 ~ HH 7 0으로 집계)
[SQL] REGEXP 응용 (1) | 2024.09.02 |
---|---|
[SQL] window function(집계, 순위, 데이터 위치) (0) | 2024.07.18 |
[SQL] subquery 종류 및 사용법 정리 (0) | 2024.07.16 |
[SQL] 3개 이상의 테이블 조인 (0) | 2024.07.05 |
[SQL] 조건에 맞는 정보 조회( JOIN, SUBQUERY(FROM, WHERE), WITH) (0) | 2024.07.04 |