제출 기록이 몇 행인지 알고 싶다면 COUNT(*)를 쓰세요. 점수가 기록된 행만 세려면 COUNT(score), 서로 다른 점수가 몇 종류인지 알고 싶다면 COUNT(DISTINCT score)를 씁니다. 같은 표에서 세 값이 달라지는 이유는 개수를 세는 대상이 다르기 때문입니다.
점수 다섯 건을 세 가지로 세기
가상의 제출 다섯 건에 점수 7, 7, NULL, 0, NULL이 들어 있습니다. 한 쿼리에서 집계식만 바꿔 결과를 나란히 봅니다.
import sqlite3
db = sqlite3.connect(":memory:")
counts = db.execute("""
WITH submissions(score) AS (VALUES (7), (7), (NULL), (0), (NULL))
SELECT COUNT(*) AS row_count,
COUNT(score) AS scored_count,
COUNT(DISTINCT score) AS distinct_scores
FROM submissions
""").fetchone()
print("rows scored distinct")
print(*counts)
db.close()
rows scored distinct
5 3 2
COUNT(*)는 제출 행 다섯 개를 모두 셉니다. 점수가 비어 있는 두 행도 제출 건수에는 포함됩니다.COUNT(score)는 점수가NULL인 두 행을 빼고7,7,0을 셉니다.0은 기록된 점수입니다.COUNT(DISTINCT score)는NULL을 세지 않고, 같은7을 한 종류로 취급합니다. 남는 점수는0과7입니다.
같은 7점을 받은 두 제출을 각각 세야 한다면 두 번째 식이 맞습니다. 점수가 몇 종류 나왔는지가 질문이면 세 번째 식을 쓰세요. 집계 결과의 열 이름을 scored_count나 distinct_scores처럼 붙이면 보고서에서 어떤 개수인지 다시 확인하기 쉽습니다.
가상 입력은 Windows의 Python 3.14.3 내장 sqlite3에서 SQLite 3.50.4로 실행했습니다. 집계의 정의는 SQLite의 COUNT 문서에서 확인할 수 있습니다.