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 함수의 차이를 명확히 이해하고 상황에 맞게 사용하는 것이 중요합니다.
'CS' 카테고리의 다른 글
CS 스터디 (DB) 21 - Connection Pool은 왜 사용해야 할까요? (0) | 2025.05.22 |
---|---|
CS 스터디 (DB) 19 - NULL 은 인덱스를 탈까요? (0) | 2025.05.20 |
CS 스터디 (DB) 17 - SQL Injection 과 방어할 수 있는 방법에 대해 설명해주세요. (0) | 2025.05.20 |
CS 스터디 (DB) 16 - IN 절에 들어갈 수 있는 최대 항목 수에 대해 알고 계실까요? (0) | 2025.05.20 |
CS 스터디 (DB) 15 - 커버링 인덱스에 대해 설명해주세요. (0) | 2025.05.20 |