본문 바로가기

프로그래밍/MSSQL

[MSSQL] COUNT CASE (조건 카운트) COUNT DISTINCT (중복제거 카운트)

반응형

 

 

 

 

COUNT CASE, COUNT DISTINCT

조건에 따른 카운트 및 중복을 제거한 카운트를 세보자

 

 

 

COUNT CASE (조건 카운트)

특정 조건에 해당하는 행의 카운트를 세보자

 

SELECT COUNT(CASE WHEN 조건 THEN 1 END)
FROM 테이블

 

조건에 일치할 경우 카운트하고, 일치하지 않을 경우 카운트하지 않는다.

 

 

예제. 반별 학생 수 카운트

반을 기준으로 반별로 학생의 수를 카운트해보자

 

WITH TABLE1 (반, 이름) AS
(
	SELECT 1, '꽁쥐'
	UNION ALL SELECT 1, '박사'
	UNION ALL SELECT 2, '찌우'
	UNION ALL SELECT 2, '소태'
	UNION ALL SELECT 2, '소희'
	UNION ALL SELECT 3, '현정'
	UNION ALL SELECT 3, '태희'
)
SELECT  COUNT(CASE WHEN 반=1 THEN 1 END) AS '1반',
	COUNT(CASE WHEN 반=2 THEN 1 END) AS '2반',
	COUNT(CASE WHEN 반=3 THEN 1 END) AS '3반'
FROM TABLE1

 

원본 데이터
결과 데이터

 

1반에 해당하는 '꽁쥐','박사' -> 2명

2반에 해당하는 '찌우', '소태', '소희' -> 3명

3반에 해당하는 '현정', '태희' -> 2명

의 결과를 가져온다.

 

 

 

위와 같은 경우는 COUNT CASE가 아니라 간단히 GROUP BY를 사용해서 표현할수도 있다.

 

WITH TABLE1 (반, 이름) AS
(
	SELECT 1, '꽁쥐'
	UNION ALL SELECT 1, '박사'
	UNION ALL SELECT 2, '찌우'
	UNION ALL SELECT 2, '소태'
	UNION ALL SELECT 2, '소희'
	UNION ALL SELECT 3, '현정'
	UNION ALL SELECT 3, '태희'
)
SELECT 반, COUNT(*) AS ' 카운트'
FROM TABLE1
GROUP BY 반

 

결과 데이터

 

 

 

 


 

 

 

 

CASE DISTINCT (중복제거 카운트)

중복된 값을 제거하고 카운트해보자

 

SELECT COUNT(DISTINCT 컬럼명)
FROM 테이블

 

값의 중복이 있을 경우 중복을 제거하여 무조건 하나로 카운트한다.

 

 

 

 

예제. 중복을 제거한 반별 학생 수 카운트

학생 수를 반별로 카운트하되, 중복을 제거하고 카운트해보자

 

WITH TABLE1(반, 이름) AS (
	SELECT 1, '꽁쥐' UNION ALL
	SELECT 1, '꽁쥐' UNION ALL
	SELECT 1, '꽁쥐' UNION ALL
	SELECT 2, '소태' UNION ALL
	SELECT 2, '룰라' UNION ALL
	SELECT 3, '소희' UNION ALL
	SELECT 3, '소희'
)
SELECT 반
	, COUNT(*) AS '중복포함'
	, COUNT(DISTINCT 이름) AS '중복제거'
FROM TABLE1
GROUP BY 반

 

원본 데이터
결과 데이터

 

1반의 꽁쥐의 데이터는 3개가 있다. COUNT(*) -> 3

하지만, DISTINCT로 중복을 제거하면 하나로 카운트한다. COUNT(DISTINCT 이름) -> 1

 

 

 

 

[MSSQL] GROUP BY 없이 컬럼과 함께 COUNT를 조회해보자 (COUNT OVER)
[MSSQL] COUNT(*) COUNT(1), COUNT(컬럼명)
[MSSQL] DISTINCT, GROUP BY 비교

 

 

 

반응형