본문 바로가기
CS

CS 스터디 (DB) 18 - COUNT(*), COUNT(1), COUNT(column), COUNT(DISTINCT column) 차이에 대해 설명해주세요.

by gentle-tiger 2025. 5. 20.

 COUNT 함수

- COUNT(*)와 COUNT(1)은 모두 테이블의 전체 행 수를 계산하며, NULL 여부와 상관없이 모든 행을 포함합니다.

- MySQL과 대부분의 RDBMS에서는 옵티마이저가 COUNT(1)의 상수를 무시하고 COUNT(*)와 동일하게 처리합니다.

- 반면 COUNT(column)은 해당 컬럼이 NULL이 아닌 경우에만 행을 카운트하고, COUNT(DISTINCT column)은 여기에 더해 중복을 제거한 고유한 값의 개수만 반환합니다.

- 따라서 컬럼에 NULL이나 중복값이 존재하는 경우, 이 네 함수는 서로 다른 결과를 반환할 수 있습니다.

 

COUNT 함수 비교표

함수 NULL 포함중복 제거설명
COUNT(*) 포함 X 테이블의 모든 행 수 계산 (전체 행)
COUNT(1) 포함 X COUNT(*)와 동일하게 처리됨 (옵티마이저 최적화)
COUNT(column) 제외 X 컬럼의 NULL이 아닌 값의 수
COUNT(DISTINCT column) 제외 포함 NULL 제외 + 중복 제거한 고유 값의 개수 계산

 

결론 

COUNT 함수는 단순한 집계 이상의 의미를 갖고 있어서, 어떤 COUNT를 선택하느냐에 따라 결과가 크게 달라질 수 있습니다.
전체 행 수를 정확히 알고 싶다면 COUNT(*), 컬럼에 실제 값이 채워진 정도를 보고 싶다면 COUNT(column), 고유한 값의 수가 필요하다면 COUNT(DISTINCT column)처럼 목적에 따라 정확히 구분해서 사용해야 합니다.
실무에서는 특히 NULL 처리 여부나 중복 제거 여부가 분석 결과에 큰 영향을 줄 수 있기 때문에, COUNT 함수의 차이를 명확히 이해하고 상황에 맞게 사용하는 것이 중요합니다.