집계 함수입문

COUNT

행이나 값의 개수를 세는 집계 함수

정의

세 가지 형태가 있고 의미가 다 다르다. COUNT(*)는 모든 행 수, COUNT(컬럼)은 그 컬럼이 NULL이 아닌 행 수, COUNT(DISTINCT 컬럼)은 그 컬럼의 중복 제외한 고유 값 개수. 예를 들어 email 컬럼에 NULL이 있으면 COUNT(*)와 COUNT(email)의 결과가 다르다.

왜 중요한가?

집계의 가장 기본 함수. COUNT(*)는 전체 행 수, COUNT(컬럼)은 그 컬럼에 값이 있는 행 수라는 차이를 모르면 NULL이 섞인 데이터에서 결과가 어긋난다. COUNT(DISTINCT)는 중복 제외가 필요해 처리 비용이 크므로 정말 필요할 때만 쓰자.

틀리기 쉬운 포인트

  • !COUNT(*)와 COUNT(컬럼)은 다릅니다. NULL이 있는 컬럼에서 차이 발생.
  • !COUNT(DISTINCT)는 정렬/해시 비용이 큽니다.
  • !COUNT(1)과 COUNT(*)는 동일합니다(과거 미신).

예시

SELECT COUNT(*) AS total_rows, COUNT(email) AS rows_with_email, COUNT(DISTINCT dept_id) AS dept_count
FROM employees;

성능 포인트

!COUNT(*)는 INDEX FAST FULL SCAN으로 처리될 수 있어 보통 가장 빠르다. COUNT(DISTINCT)는 피할 수 있으면 피하라.

관련 개념

관련 문제 풀어보기

관련 카테고리