메뉴 닫기

MSSQL COUNT 함수 완벽 가이드, 행 개수를 정확하게 세는 방법

MSSQL COUNT 함수 완벽 가이드, 행 개수를 정확하게 세는 방법

📌 초보자도 쉽게 이해하는 COUNT 함수 사용법과 실전 예제

데이터베이스에서 원하는 데이터를 분석하려면, 특정 조건에 맞는 행의 개수를 정확히 세는 것이 매우 중요합니다.
그럴 때 COUNT 함수는 빼놓을 수 없는 핵심 집계 함수입니다.
특히 MSSQL에서 COUNT 함수는 SQL 초보자부터 전문가까지 모두 자주 사용하는 기능으로, 테이블 전체 행 수, 특정 컬럼의 값 개수, 조건에 맞는 데이터 수 등을 빠르고 정확하게 계산할 수 있습니다.
이번 글에서는 COUNT 함수의 기본 문법부터 실무에서 자주 쓰이는 활용 예제까지, 누구나 이해할 수 있도록 차근차근 설명해드리겠습니다.

COUNT 함수는 단순히 숫자를 세는 것 같지만, 옵션과 조건을 어떻게 주느냐에 따라 다양한 결과를 얻을 수 있습니다.
예를 들어 COUNT(*)는 모든 행을 세지만, COUNT(컬럼명)은 NULL 값을 제외한 데이터만 셉니다.
또한 WHERE 절과 함께 사용하면 조건에 맞는 행만 집계할 수 있어 통계나 리포트 작성 시 매우 유용합니다.
이 글을 읽고 나면 COUNT 함수를 자유자재로 활용해 원하는 데이터를 정확히 집계할 수 있을 것입니다.



🔗 COUNT 함수란?

COUNT 함수는 SQL에서 행(Row)의 개수를 계산하는 집계 함수(Aggregate Function)입니다.
데이터를 집계하고 분석할 때 매우 자주 쓰이며, 특히 보고서 작성이나 통계 분석 시 필수적으로 사용됩니다.
MSSQL에서는 COUNT 함수를 통해 테이블 전체 행 수, 특정 조건에 맞는 행 수, 또는 NULL 값을 제외한 컬럼 값의 개수 등을 손쉽게 구할 수 있습니다.

COUNT 함수의 기본 문법은 다음과 같습니다.

CODE BLOCK
SELECT COUNT(*) 
FROM 테이블명;

예를 들어, orders 테이블의 전체 주문 건수를 구하려면 다음과 같이 작성합니다.

CODE BLOCK
SELECT COUNT(*) 
FROM orders;

💡 TIP: COUNT(*)는 NULL 값을 포함한 모든 행을 계산하지만, COUNT(컬럼명)은 해당 컬럼의 NULL 값을 제외하고 개수를 계산합니다.

COUNT 함수는 단독으로도 유용하지만, WHERE, GROUP BY, HAVING 절과 함께 쓰면 훨씬 강력한 데이터 분석 도구가 됩니다.
예를 들어 특정 날짜 범위의 주문 수, 고객별 구매 건수, 조건에 맞는 데이터 필터링 후 집계 등 다양한 통계 처리가 가능합니다.

🛠️ COUNT(*)와 COUNT(컬럼명)의 차이

COUNT 함수는 형태에 따라 결과가 달라집니다.
대표적으로 COUNT(*)COUNT(컬럼명)이 있습니다.
두 형태의 차이를 정확히 이해하면, 불필요한 오류를 방지하고 원하는 결과를 빠르게 얻을 수 있습니다.

📌 COUNT(*)

COUNT(*)는 테이블의 모든 행을 계산합니다.
여기에는 NULL 값이 포함된 컬럼이 있더라도 행 자체가 존재하면 개수에 포함됩니다.
예를 들어, 주문 데이터에서 고객명이 NULL이더라도 해당 주문 건수는 집계됩니다.

CODE BLOCK
SELECT COUNT(*) 
FROM orders;

📌 COUNT(컬럼명)

COUNT(컬럼명)은 해당 컬럼에서 NULL 값을 제외한 데이터만 집계합니다.
즉, 컬럼 값이 비어 있는 경우 그 행은 카운트하지 않습니다.
이 기능은 특정 필드의 유효 데이터 개수를 확인할 때 유용합니다.

CODE BLOCK
SELECT COUNT(CustomerName) 
FROM orders;

⚠️ 주의: COUNT(컬럼명)에 DISTINCT를 적용하면, 중복을 제거한 고유 값의 개수만 계산됩니다.
예: COUNT(DISTINCT CustomerName)

따라서 단순히 전체 행 수를 알고 싶다면 COUNT(*)를, 특정 컬럼의 유효 데이터 수를 확인하려면 COUNT(컬럼명)를 사용하는 것이 좋습니다.



⚙️ WHERE 절과 COUNT 함수 함께 쓰기

COUNT 함수는 WHERE 절과 함께 사용할 때 특정 조건에 맞는 데이터 개수를 손쉽게 구할 수 있습니다.
예를 들어, 주문 테이블에서 특정 고객의 주문 건수나 특정 기간 동안의 데이터 개수를 확인할 수 있습니다.

📌 특정 조건의 데이터 개수 세기

예를 들어, 고객명이 ‘홍길동’인 주문 건수를 구하려면 다음과 같이 작성합니다.

CODE BLOCK
SELECT COUNT(*) 
FROM orders
WHERE CustomerName = '홍길동';

📌 특정 기간의 데이터 개수 세기

2024년 1월 한 달 동안 발생한 주문 수를 구하려면 다음과 같이 작성합니다.

CODE BLOCK
SELECT COUNT(*) 
FROM orders
WHERE OrderDate BETWEEN '2024-01-01' AND '2024-01-31';

💡 TIP: WHERE 절을 활용하면 COUNT 함수로 특정 조건을 만족하는 데이터만 집계할 수 있으므로, 불필요한 데이터까지 세지 않아도 됩니다.

이 방법은 판매 실적, 고객 활동, 이벤트 참여 횟수 등 다양한 비즈니스 분석 상황에서 널리 사용됩니다.

🔌 GROUP BY와 COUNT로 집계하기

COUNT 함수는 GROUP BY 절과 함께 사용하면 데이터를 그룹별로 나누어 각 그룹의 행 개수를 집계할 수 있습니다.
이 방법은 통계 분석, 보고서 작성, 데이터 시각화 등에서 매우 유용합니다.

📌 고객별 주문 건수 집계

다음 예제는 고객별로 주문 건수를 집계하는 방법입니다.

CODE BLOCK
SELECT CustomerName, COUNT(*) AS OrderCount
FROM orders
GROUP BY CustomerName;

📌 월별 주문 건수 집계

다음 예제는 주문일자를 기준으로 월별 주문 건수를 계산합니다.

CODE BLOCK
SELECT FORMAT(OrderDate, 'yyyy-MM') AS OrderMonth, COUNT(*) AS OrderCount
FROM orders
GROUP BY FORMAT(OrderDate, 'yyyy-MM')
ORDER BY OrderMonth;

💡 TIP: GROUP BY와 COUNT를 함께 사용하면, 고객별 구매 빈도, 지역별 매출 건수, 제품별 판매량 등 다양한 형태로 데이터를 분석할 수 있습니다.

또한 HAVING 절을 사용하면 특정 조건을 만족하는 그룹만 필터링할 수 있습니다.
예를 들어 주문 건수가 5건 이상인 고객만 조회할 수 있습니다.

CODE BLOCK
SELECT CustomerName, COUNT(*) AS OrderCount
FROM orders
GROUP BY CustomerName
HAVING COUNT(*) >= 5;



💡 실무에서 자주 쓰는 COUNT 함수 예제

COUNT 함수는 단순한 행 개수 계산뿐 아니라 다양한 분석 상황에서 실무적으로 활용됩니다.
아래에서는 자주 사용되는 몇 가지 패턴을 소개합니다.

📌 특정 상태의 데이터 개수

예를 들어 주문 상태가 ‘배송완료’인 건수를 구하려면 다음과 같이 작성합니다.

CODE BLOCK
SELECT COUNT(*) AS CompletedOrders
FROM orders
WHERE Status = '배송완료';

📌 중복 제거 후 개수 세기

중복을 제외한 고유 고객 수를 확인하려면 DISTINCT 키워드를 활용합니다.

CODE BLOCK
SELECT COUNT(DISTINCT CustomerID) AS UniqueCustomers
FROM orders;

📌 조건별 개수 한 번에 계산하기

CASE 문을 사용하면 하나의 쿼리에서 조건별 개수를 동시에 구할 수 있습니다.

CODE BLOCK
SELECT 
    COUNT(CASE WHEN Status = '배송완료' THEN 1 END) AS CompletedOrders,
    COUNT(CASE WHEN Status = '취소' THEN 1 END) AS CanceledOrders
FROM orders;

💡 TIP: 이렇게 하면 여러 번 쿼리를 실행할 필요 없이 한 번에 조건별 집계가 가능합니다.

실무에서는 COUNT 함수를 보고서, 대시보드, 경영지표 작성 등에 널리 활용합니다.
또한 효율적인 데이터 분석을 위해 다른 집계 함수(SUM, AVG 등)와 함께 사용하는 경우도 많습니다.

자주 묻는 질문 (FAQ)

COUNT 함수와 ROWCOUNT는 같은 기능인가요?
COUNT 함수는 쿼리 결과에서 행의 개수를 계산하는 집계 함수이고, ROWCOUNT는 쿼리 실행 후 영향을 받은 행 수를 반환하는 시스템 변수로 용도가 다릅니다.
COUNT(*)와 COUNT(1)의 차이가 있나요?
기능적으로 차이는 없으며, 대부분의 데이터베이스 엔진에서 동일하게 처리됩니다. 성능 차이도 거의 없습니다.
COUNT 함수에서 NULL 값을 포함하려면 어떻게 하나요?
COUNT(*)를 사용하면 NULL 값을 포함한 모든 행이 계산됩니다. COUNT(컬럼명)은 NULL 값을 제외합니다.
GROUP BY와 COUNT를 함께 쓰면 성능에 영향이 있나요?
데이터량이 많을수록 성능에 영향이 있을 수 있습니다. 필요한 컬럼만 선택하고 적절한 인덱스를 활용하면 성능을 개선할 수 있습니다.
COUNT 함수 대신 다른 집계 함수를 써도 되나요?
SUM, AVG, MAX, MIN 등 다른 집계 함수는 데이터의 총합, 평균, 최대값, 최소값을 계산하며 COUNT와 목적이 다릅니다.
COUNT DISTINCT를 사용할 때 주의할 점은 무엇인가요?
DISTINCT는 중복을 제거한 후 개수를 계산하므로, 대용량 데이터에서는 성능 저하가 발생할 수 있습니다.
COUNT 함수에서 조건을 여러 개 적용하려면 어떻게 하나요?
CASE 문을 COUNT 안에 사용하면 조건별 개수를 한 번에 구할 수 있습니다.
COUNT 함수와 HAVING 절을 함께 쓰는 이유는 무엇인가요?
HAVING 절은 GROUP BY 결과에 조건을 걸 때 사용됩니다. 예를 들어 주문 건수가 10건 이상인 고객만 조회할 수 있습니다.

📌 COUNT 함수를 활용한 효율적인 데이터 집계 정리

MSSQL의 COUNT 함수는 데이터 분석과 보고서 작성에서 빼놓을 수 없는 필수 도구입니다.
COUNT(*)를 사용하면 전체 행 개수를, COUNT(컬럼명)를 사용하면 특정 컬럼의 유효 데이터 수를 빠르게 확인할 수 있습니다.
또한 WHERE 절을 결합하면 조건에 맞는 데이터만 집계할 수 있고, GROUP BY와 함께 사용하면 그룹별 통계를 쉽게 만들 수 있습니다.
DISTINCT와 CASE 문을 활용하면 중복 제거 및 조건별 집계도 한 번에 처리할 수 있어 실무에서 생산성을 높이는 데 큰 도움이 됩니다.
이번 글에서 소개한 다양한 예제와 팁을 활용하면, 데이터베이스 쿼리 작성 속도와 정확도를 동시에 향상시킬 수 있을 것입니다.


🏷️ 관련 태그 : MSSQL, COUNT함수, SQL집계함수, 데이터집계, GROUPBY, DISTINCT, WHERE절, HAVING절, SQL기초, 데이터분석