COUNT(*)는 행을 세고 COUNT(열)은 그 열이 NULL이 아닌 행을 센다. DISTINCT가 붙으면 중복값도 한 번만 센다.
books는 4행이고 쪽수는 120·200·NULL·160이다. COUNT(*)는 4, COUNT(pages)는 3이다. shelf_code는 DB·SW·DB·NULL이므로 COUNT(DISTINCT shelf_code)는 2다.
GROUP BY가 없는 아래 집계는 값 세 개를 가진 결과 한 행을 반환한다. 빈 입력에서도 COUNT는 0을 반환하지만 SUM 같은 집계는 보통 NULL을 반환한다. NULL을 0으로 간주하지 않는다.
- 01 →
입력 행 수
- 02 →
NULL 여부
- 03 →
중복 여부
- 04
결과 행 수
같은 상황에서 비교하기
| 개념 | 기준 | 확인할 점 |
|---|---|---|
| COUNT(*) | 입력 행 수 | NULL 열이 있어도 행을 센다 |
| COUNT(pages) | 값이 있는 행 수 | pages가 NULL이면 세지 않는다 |
| COUNT(DISTINCT shelf_code) | 고유한 비NULL 값 수 | 같은 DB는 한 번 센다 |
도서관 예제로 따라가기
SELECT COUNT(*) AS all_rows,
COUNT(pages) AS known_pages,
COUNT(DISTINCT shelf_code) AS shelves
FROM books;| all_rows | known_pages | shelves |
|---|---|---|
| 4 | 3 | 2 |
집계값은 4·3·2이고 결과 행 수는 1이다.
공통 예제 데이터 보기
| book_id | title | shelf_code | pages |
|---|---|---|---|
| 1 | SQL 입문 | DB | 120 |
| 2 | 설계 노트 | SW | 200 |
| 3 | 관계 모델 | DB | NULL |
| 4 | 분산 읽기 | NULL | 160 |
| loan_id | book_id |
|---|---|
| 11 | 1 |
| 12 | 1 |
| 13 | 2 |
내 말로 설명해 보기
쪽수가 NULL인 책을 80쪽으로 수정하면 COUNT(*)와 COUNT(pages)는 어떻게 될까?
설명 예시 확인
행 수는 그대로 4다. 쪽수 값이 모두 있으므로 COUNT(pages)도 4가 된다. NULL을 숫자와 구분해서 세는 기준을 확인한다.
참고한 자료
이전 개념 자료와의 연결
이전 자료에서 다룬 주제를 이어받아 설명과 예시를 다시 썼어요.
- COUNT·NULL·DISTINCT