상세 컨텐츠

본문 제목

[SQL] WEEK 4 TUES - COUNT() 정리

SQL

by ollive 2024. 7. 17. 17:04

본문

1. count(*) 과 count(1), count(column) 차이

  • COUNT(*)과 COUNT(1)은 조건을 충족하는 모든 행의 수를 집계한다
  • COUNT(column)은 해당 값이 NULL이 아닌 경우에만 집계한다.
  • COUNT(DISTINCT column)을 사용해주면  NULL이 아닌 값중에 중복을 제거하고 집계한다.

 

예제1) 상품을 구매한 회원 수를 집계하는 문제 

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으로 집계)

 

 

 

 

 

 

관련글 더보기