CS 길라잡이
정보처리기사 이론
읽기 설정
글꼴 조합

제목 · 본문 순서예요. 선택하면 지금 읽는 화면에 적용돼요.

글꼴 출처 ↗
읽기 글자 크기

정보처리기사 · DB·SQL · 09/15

NULL과 중복을 세는 방법

COUNT(*)와 COUNT(pages)는 왜 다를까?

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으로 간주하지 않는다.

  1. 01 →

    입력 행 수

  2. 02 →

    NULL 여부

  3. 03 →

    중복 여부

  4. 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;
예상 결과 · 격리된 PGlite 실행으로 확인
all_rowsknown_pagesshelves
432

집계값은 4·3·2이고 결과 행 수는 1이다.

공통 예제 데이터 보기
books
book_idtitleshelf_codepages
1SQL 입문DB120
2설계 노트SW200
3관계 모델DBNULL
4분산 읽기NULL160
loans
loan_idbook_id
111
121
132

내 말로 설명해 보기

쪽수가 NULL인 책을 80쪽으로 수정하면 COUNT(*)와 COUNT(pages)는 어떻게 될까?

0/6,000자 · 브라우저 저장 · 계정 동기화 없음

설명한 뒤 점검하기

설명 예시 확인

행 수는 그대로 4다. 쪽수 값이 모두 있으므로 COUNT(pages)도 4가 된다. NULL을 숫자와 구분해서 세는 기준을 확인한다.

암기한 문장과 같을 필요는 없어요. 개념의 기준과 예외가 맞는지 비교하세요.

참고한 자료

집계 함수 ↗

PostgreSQL 18 · 확인 2026-10-28

이전 개념 자료와의 연결

이전 자료에서 다룬 주제를 이어받아 설명과 예시를 다시 썼어요.