COUNT 함수 정리

TJK·2025년 8월 22일
0

COUNT 함수 정리

COUNT 함수는 SQL에서 행의 수를 세는 가장 기본적인 집계 함수입니다. SQLD 시험에서는 COUNT(*)COUNT(컬럼명)의 미묘한 차이점, 그리고 NULL 값 처리 방식에 대한 문제가 자주 출제됩니다.


1. COUNT 함수 종류 및 개념

핵심 개념 (★★★★★)

  • COUNT(*): 테이블의 전체 행(Row) 수를 카운트합니다. NULL 값이 포함된 행도 모두 셉니다.
  • COUNT(컬럼명): 특정 컬럼NULL이 아닌 값들만 카운트합니다.
  • COUNT(DISTINCT 컬럼명): 특정 컬럼에서 중복을 제거한 후 NULL이 아닌 값들만 카운트합니다.

2. COUNT 함수 사용 예시

Users 테이블 (예시 데이터)

user_iduser_namecity
1KimSeoul
2LeeBusan
3ParkNULL
4KimDaejeon
5ChoiSeoul
6NULLBusan

예시 쿼리 및 결과

-- 1. 모든 행의 수를 셉니다.
SELECT COUNT(*) FROM Users;  -- 결과: 6 (총 6개 행)

-- 2. user_name이 NULL이 아닌 행의 수를 셉니다.
SELECT COUNT(user_name) FROM Users; -- 결과: 5 (NULL인 6번 행 제외)

-- 3. city 컬럼의 NULL이 아닌 값의 수를 셉니다.
SELECT COUNT(city) FROM Users; -- 결과: 5 (NULL인 3번 행 제외)

-- 4. user_name의 유일한 값의 수를 셉니다. (중복, NULL 제외)
SELECT COUNT(DISTINCT user_name) FROM Users;  -- 결과: 4 (Kim, Lee, Park, Choi)

3. SQLD 시험 핵심 포인트

  • COUNT(*) vs COUNT(컬럼명): 가장 중요한 구분점은 NULL 값의 포함 여부입니다.
    • COUNT(*)NULL을 포함하여 전체 행 수를 세고, COUNT(컬럼명)NULL을 제외합니다.
  • COUNT(DISTINCT 컬럼명): 중복된 값과 NULL을 모두 제외하여 고유한 값의 개수만 반환합니다.
  • COUNT(상수): COUNT(1), COUNT('A') 등은 상수가 NULL이 될 수 없으므로 COUNT(*)동일한 결과를 반환합니다.
  • NULL vs 0: NULL은 '값이 없음'이지만, 0은 유효한 값입니다. COUNT(0)0NULL이 아닌 값으로 인식하여 COUNT(*)와 동일하게 처리합니다.

4. 암기 팁

  • COUNT(*) → ****처럼 모든 것을 센다.
  • COUNT(컬럼) → **컬럼**에 **NULL**이 있는지 확인 후 센다.
  • COUNT(DISTINCT) → **중복**을 빼고 센다.

실전 기출 문제 스타일

1. 다음 중 COUNT(*)COUNT(컬럼명)의 차이를 가장 잘 설명한 것은?
A. 두 함수 모두 NULL을 제외한다.
B. COUNT(*)NULL 포함, COUNT(컬럼명)NULL 제외.
C. COUNT(*)는 전체 행 수, COUNT(컬럼명)은 중복만 제외.
D. 두 함수는 완전히 동일하다.

2. 아래 Users 테이블이 있을 때, 다음 SQL의 결과는?
| user_id | user_name |
| :--- | :--- |
| 1 | Kim |
| 2 | Lee |
| 3 | NULL |
| 4 | Kim |
| 5 | NULL |

SELECT COUNT(DISTINCT user_name) FROM Users;

A. 5
B. 3
C. 2
D. 1

3. 다음 중 COUNT(*)와 결과가 다른 것은?
A. COUNT(1)
B. COUNT('A')
C. COUNT(NULL)
D. COUNT(0)

4. 시험 문제로 자주 등장하는 함정: COUNT(DISTINCT 컬럼)의 특징으로 옳은 것은?
A. NULL은 카운트한다.
B. 중복만 제거하고 NULL은 포함한다.
C. 중복과 NULL 모두 제거한다.
D. COUNT(*)와 같다.


정답 및 해설

  • 문제 1 정답: B
    • 해설: COUNT(*)는 테이블의 모든 행 수를 세므로 NULL을 포함하고, COUNT(컬럼명)은 해당 컬럼에 NULL 값이 있는 행을 제외하고 셉니다.
  • 문제 2 정답: C
    • 해설: COUNT(DISTINCT user_name)NULL을 제외하고 중복된 'Kim'을 하나로 세므로, 결과는 'Kim'과 'Lee'의 개수인 2가 됩니다.
  • 문제 3 정답: C
    • 해설: COUNT(NULL)NULL이 값이 아니므로 항상 0을 반환합니다. COUNT(1), COUNT('A'), COUNT(0)은 모두 NULL이 될 수 없는 유효한 값이므로 COUNT(*)와 동일한 결과를 반환합니다.
  • 문제 4 정답: C
    • 해설: DISTINCT 키워드는 중복을 제거하고, COUNT 함수는 NULL을 제외하므로, COUNT(DISTINCT 컬럼)은 중복과 NULL을 모두 제거한 고유한 값의 개수를 셉니다.
profile
Hello world!

0개의 댓글