[MSSQL] 건수 구하기 (COUNT, COUNT_BIG 함수)
- 데이터베이스/MSSQL
- 2022. 6. 28.
SQL Server에서 데이터 건수를 집계하기 위해서는 COUNT, COUNT_BIG 함수를 사용하면 된다. 일반적으로는 COUNT 함수를 사용하며, 데이터 건수가 21억 건이 넘어간다면 COUNT_BIG 함수를 사용해야 한다. COUNT 함수 인자에 DISTINCT 연산자를 사용하면 해당 칼럼을 중복 제거하여 건수를 집계할 수 있다. COUNT(칼럼명)으로 사용할 경우 해당 칼럼의 값이 NULL인 경우 건수 집계에서 제외되니 주의해야 한다.
목차 |
전체 데이터 건수 구하기
건수 구하기
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 절의 정확한 사용방법을 이해하면 조금 더 쿼리문을 멋지게 작성할 수 있다.