[MSSQL] 건수 구하기 (COUNT, COUNT_BIG 함수)

SQL Server에서 데이터 건수를 집계하기 위해서는 COUNT, COUNT_BIG 함수를 사용하면 된다. 일반적으로는 COUNT 함수를 사용하며, 데이터 건수가 21억 건이 넘어간다면 COUNT_BIG 함수를 사용해야 한다. COUNT 함수 인자에 DISTINCT 연산자를 사용하면 해당 칼럼을 중복 제거하여 건수를 집계할 수 있다. COUNT(칼럼명)으로 사용할 경우 해당 칼럼의 값이 NULL인 경우 건수 집계에서 제외되니 주의해야 한다.

 

MSSQL 건수 구하기 (COUNT 함수)

목차
  1. 전체 데이터 건수 구하기
  2. 그룹별 건수 구하기 (GROUP BY 절)
  3. 분석함수를 사용하여 건수 구하기 (OVER 절)

 

전체 데이터 건수 구하기

건수 구하기

SELECT COUNT(*)
  FROM emp
 WHERE job = 'SALESMAN'

 

 

직업(job)이 "SALESMAN"인 직원수를 집계한다.

COUNT(*)는 조회된 데이터(행)의 총건수를 의미한다.

 

COUNT()와 COUNT_BIG() 차이

SELECT COUNT(*)     AS cnt
     , COUNT_BIG(*) AS cnt_big
  FROM emp
 WHERE job = 'SALESMAN'

 

 

COUNT 함수는 반환 유형이 int(4바이트)이며 약 21억의 건수를 집계할 수 있다.

COUNT_BIG 함수는 유형이 bigint(8바이트)이며 약 900경의 건수를 집계할 수 있다. 

 

데이터 집계 건수가 21억 건이 넘어갈 수 있다면 COUNT_BIG 함수를 사용해야 한다. 

21억 건 이하의 집계는 동일한 값을 반환하기 때문에 어느 함수를 사용하든 상관없다.

 

COUNT(*)와 COUNT(칼럼명) 차이

SELECT COUNT(*)    AS cnt
     , COUNT(sal)  AS cnt_col1
     , COUNT(comm) AS cnt_col2
  FROM emp
 WHERE job IN ('MANAGER', 'SALESMAN')

 

 

COUNT(*) 처럼 인자에 "*"를 사용할 경우 조회된 모든 데이터 건수를 집계한다.

COUNT(comm) 처럼 인자에 칼럼명을 사용할 경우 해당 칼럼의 값이 NULL이 아닌 경우만 건수를 집계한다.

 

성과급(comm)의 칼럼에 NULL이 아닌 직원의 수는 4명이다.

 

칼럼 값 중복 제거 후 건수 구하기

SELECT COUNT(*)            AS cnt_emp
     , COUNT(DISTINCT job) AS cnt_job
  FROM emp

 

 

COUNT(DISTINCT job)처럼 인자에 DISTINCT 연산자를 사용할 경우 해당 칼럼의 중복을 제거한 후 건수를 집계한다. 사원(emp) 테이블에 등록된 직원은 14명이고, 직업(job)의 종류는 5건이다.

 

그룹별 건수 구하기 (GROUP BY 절)

그룹별 건수 구하기

SELECT job
     , COUNT(*) AS cnt
  FROM emp
 GROUP BY job

 

 

직업(job) 별로 직원수를 집계한다.

 

그룹별 건수 구하기 2

SELECT job
     , COUNT(*) AS cnt
     , SUM(sal) / COUNT(*) AS avg_sal 
  FROM emp
 GROUP BY job

 

 

여러 개의 집계 함수를 동시에 사용할 수 있으며, 집계 함수끼리 연산도 가능하다.

 

분석함수를 사용하여 건수 구하기 (OVER 절)

조회된 전체 건수를 각 행에 표시

SELECT empno  
     , ename
     , job
     , sal
     , COUNT(*) OVER() AS cnt_emp
  FROM emp
 WHERE job = 'SALESMAN'

 

 

COUNT 함수를 OVER 절을 함께 사용하면 조회된 데이터의 총건수를 각 행에 표시할 수 있다.

OVER 절은 데이터 조회를 모두 수행한 후 다시 데이터를 집계하는 방식이다.

 

그룹별로 조회된 전체 건수를 각 그룹 행에 표시

SELECT empno  
     , ename
     , job
     , sal
     , COUNT(*) OVER(PARTITION BY job) AS cnt_emp
  FROM emp
 WHERE job IN ('MANAGER', 'SALESMAN')

 

 

OVER 절 내부에 PARTITION BY 절을 함께 사용하면 그룹별로 조회된 총건수를 그룹별 행에 표시할 수 있다.

 

OVER 절과 GROUP BY 절의 정확한 사용방법을 이해하면 조금 더 쿼리문을 멋지게 작성할 수 있다.

예제쿼리(테이블포함).txt
0.00MB

 

 

[MSSQL] GROUP BY 절 사용법 (그룹별 집계)

SQL Server에서 GROUP BY 절은 특정 칼럼을 기준으로 집계 함수를 사용하여 건수(COUNT), 합계(SUM), 평균(AVG) 등 집 계성 데이터를 추출할 때 사용한다. GROUP BY 절에서 기준 칼럼을 여러 개 지정할 수 있으

gent.tistory.com

 

댓글

Designed by JB FACTORY