CodeGym /행동 /SQL SELF /COUNT()로 행 개수 세기와 그 변형들

COUNT()로 행 개수 세기와 그 변형들

SQL SELF
레벨 7 , 레슨 1
사용 가능

COUNT() 함수는 SQL에서 제일 많이 쓰이고 유용한 집계 함수 중 하나야. 이 함수의 주된 목적은 쿼리 결과에서 행의 개수를 세는 거지. 만약 COUNT() 함수가 SQL 세계의 슈퍼히어로라면, 얘의 초능력은 이런 질문에 빠르게 답해주는 거야:

  • 회사에 직원이 몇 명 있어?
  • 각 학과에 학생이 몇 명이야?
  • 지난달에 상품이 몇 개 팔렸어?

COUNT()의 문법은 꽤 간단해:

COUNT(열)

여기서 은 행을 셀 때 쓸 열의 이름이야. 근데 이거 말고도 다른 방식들이 있는데, 그건 아래에서 더 다뤄볼게.

가장 기본적인 COUNT() 사용법부터 시작하자.

버전 1: COUNT(*)로 모든 행 세기

테이블에서 데이터가 있든 없든 모든 행을 세고 싶을 때는 COUNT(*)를 써. 별표는 "모든 열"이라는 뜻이야.

예시: students 테이블이 이렇게 있다고 해보자:

id name age
1 Otto 20
2 Maria 22
3 NULL 19
4 Anna 21

다음 쿼리를 실행해보자:

SELECT COUNT(*) 
FROM students;

결과:

count
4

COUNT(*) 함수는 각 열에 NULL 값이 있든 없든 그냥 테이블의 모든 행을 세는 거라서 NULL 값은 신경 안 써.

버전 2: COUNT(column)으로 특정 열에 값이 있는 행만 세기

근데 만약 특정 열에 NULL이 아닌 값이 있는 행만 세고 싶으면? 그럴 땐 COUNT(column)을 써.

예시: 이름이 적혀 있는 학생만 세보자.

SELECT COUNT(name)
FROM students;

결과:

count
3

차이점 보이지? 테이블엔 4행이 있지만, 그 중 한 행의 name 열이 NULL이야. COUNT(column) 함수는 그 열이 NULL인 행은 무시해.

COUNT(*)COUNT(column) 비교

그럼 이 두 가지 방식, COUNT(*)COUNT(column)의 차이는 뭘까?

  • COUNT(*)모든 행을 세. 어떤 열에 NULL이 있든 상관없어.
  • COUNT(column)은 지정한 열에 NULL이 아닌 값이 있는 행만 세.

예시 테이블:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21

쿼리들:

-- 모든 행을 센다.
SELECT COUNT(*) FROM students;         -- 4  -- TOTAL (모든 행)

-- 이름이 NULL이 아닌 행만 센다.
SELECT COUNT(name) FROM students;      -- 3  -- 이름이 있는 행만 세기

-- 나이가 NULL이 아닌 행만 센다.
SELECT COUNT(age) FROM students;        -- 3  -- 나이가 있는 행만 세기

버전 3: COUNT(DISTINCT column)으로 유니크 값 세기

가끔은 열에서 유니크한 값만 세고 싶을 때가 있어. 예를 들어, 학생들의 나이가 몇 가지가 있는지 알고 싶을 때 COUNT(DISTINCT column)이 딱이야.

예시:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(DISTINCT age) FROM students;

결과:

count
3

여기서 DISTINCT는 중복뿐만 아니라 NULL 값도 무시한다는 점에 주목해.

DISTINCTCOUNT(*)랑 같이 쓰려고 하면 에러 나니까 주의! DISTINCT는 특정 열에만 쓸 수 있어.

COUNT() 실제 문제에서 쓰는 예시들

예시 1. 학생 수 세기

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(*) AS total_students
FROM students;

결과:

total_students
4

예시 2. 나이가 적혀 있는 학생 수 세기

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(age) AS students_with_age
FROM students;

결과:

students_with_age
3

예시 3. 유니크한 나이 개수 세기

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 20
SELECT COUNT(DISTINCT age) AS unique_ages
FROM students;

결과:

unique_ages
2

COUNT() 쓸 때 자주 하는 실수들

COUNT(column)NULL이 있어도 모든 행을 세줄 거라고 기대하기.

이건 아니야: COUNT(column)은 지정한 열이 NULL인 행은 무시해.

COUNT(*)로 유니크 값 세려고 하기.

이럴 땐 COUNT(DISTINCT column)을 써야 해.

필터링된 데이터에서 세는 걸 깜빡하기.

예를 들어:

SELECT COUNT(*) FROM students WHERE age > 20;

이 쿼리는 20살 넘는 학생만 세는 거고, WHERE가 먼저 행을 거른 다음에 세는 거야.

이런 디테일 때문에 쿼리에서 논리적 실수가 자주 나와. 항상 신경 써!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION