정처기(실기)/SQL 응용

집계성 SQL 작성

jjonse 2022. 9. 3. 17:57

(1) 데이터 분석 함수의 개념

- 총합, 평균 등의 데이터 분석을 위해서는 복수 행 기준의 데이터를 모아서 처리하는 것을 목적으로 하는 다중 행 함수이다.

- 데이터 분석을 위한 다중 행 함수의 공통적인 특성은 아래와 같다. 

 

  1. 단일 행을 기반으로 산출하지 않고 복수 행을 그룹별로 모아 놓고 그룹당 단일 계산 결과를 반환한다.
  2. GROUP BY 구문을 활용하여 복수 행을 그룹핑한다.
  3. SELECT, HAVING, ORDER BY 등의 구문에 활용한다.

 

(2) 데이터 분석 함수의 종류

함수 설명
집계 함수 여러 행 또는 테이블 전체 행으로부터 하나의 결괏값을 반환하는 함수
그룹 함수 소그룹 간의 소계 및 중계 등의 중간 합계 분석 데이터를 산출하는 함수
윈도 함수 데이터베이스를 사용한 온라인 분석 처리 용도로 사용하기 위해서 표준 SQL에 추가된 기능

 

(3) 집계 함수

- 여러 행 또는 테이블 전체 행으로부터 하나의 결괏값을 반환하는 함수이다. 

 

1. 집계 함수 구문

SELECT 컬럼1, 컬럼2, ..., 집계함수
	FROM 테이블명
[WHERE 조건]
GROUP BY 컬럼1, 컬럼2, ...
[HAVING 조건식(집계함수 포함)]

- WHERE 조건으로 지정된 데이터 집합으로부터 그룹화된 집합에 대한 조건 선택 시에 HAVING을 사용하는 것이다.

- GROUP BY 구문 뒤에는 테이블을 구분하는 컬럼을 기재하여 그룹화한다.

- HAVING 구문은 그룹화된 집합에 대한 조건 지정 시 사용하고, 상수나 집약 함수, 집약 키를 사용할 수 있다.

 

① GROUP BY 구문

- SQL에서는 WHERE 구문을 활용하여 조건별 대상 ROW를 선택한다.

- 복수 ROw 대상의 데이터 분석 시 그룹핑 대상이 되는 부분을 선별할 필요가 있다.

- GROUP BY는 그와 같은 경우에 사용하며, 아래와 같은 특성을 가진다. 

  1. NULL 값을 가지는 ROW는 제외한 후 산출한다.
  2. SELECT에서 사용하는 것과 같은 ALIAS 사용이 불가하다.
  3. WHERE 구문 안에 포함되지 않는다.
  4. WHERE 구문은 GROUP BY보다 먼저 실행되고, 대상이 되는 단일 행을 사전에 선별하는 역할을 한다. 

- GROUP BY 구문은 실제 구체적 데이터 분석값을 보고자 하는 컬럼 단위를 선정할 때 사용되는 기준이 되며, 이 부분의 조정을 통해 사용자가 원하는 분석 데이터를 볼 수 있게 해준다.

 

 

② HAVING 구문

- WHERE 구문 내에는 사용할 수 없는 집계 함수의 구문을 적용하여 복수 행의 계산 결과를 조건별로 적용하는 데 사용된다. 

- 일반적으로 GROUP BY 뒤에 기재하며, GROUP BY 구문의 기존 항목이나 소그룹 집계 함수를 활용한 조건을 적용하는 데 사용한다.

- 쉽게 생각하면 GROUP BY 및 집계 함수에 대한 WHERE 구문이다. 

 

2. 집계 함수의 종류

- 집계 특성상 숫자 유형의 계산에 사용되는 것이 대다수이나, MAX/MIN 또는 COUNT와 같이 문자열 유형의 최대/최소나 건수 계산 등에도 사용한다. 

 

  • COUNT : 복수 행의 줄 수를 반환하는 함수
  • SUM : 복수 행의 해당 컬럼 간의 합계를 계산하는 함수
  • AVG : 복수 행의 해당 컬럼 간의 평균을 계산하는 함수
  • MAX : 복수 행의 해당 컬럼 중 최댓값을 계산하는 함수
  • MIN : 복수 행의 해당 컬럼 중 최솟값을 계산하는 함수
  • STDDEV : 복수 행의 해당 컬럼 간의 표준편차를 계산하는 함수
  • VARIAN : 복수 행의 해당 컬럼 간의 분산을 계산하는 함수

 

(4) 그룹 함수

- 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼 값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수이다. 

 

1. 그룹 함수의 유형

① ROLLUP 함수

- ROLLUP에 의해 지정된 컬럼은 소계 등 중간 집계 값을 산출하기 위한 그룹 함수이다. 

- 지정 컬럼의 수보다 하나 더 큰 레벨만큼의 중간 집계 값이 생성딘다.

- ROLLUP의 지정 컬럼은 계층별로 구성되기 때문에 순서가 바뀌면 수행 결과가 바뀜을 유의한다. 

- 소계 집계 대상이 되는 컬럼을 ROLLUP 뒤에 기재하고, 소계 집계 대상이 아닌 경우 GROUP BY 뒤에 기재한다.

- SELECT 뒤에 포함되는 컬럼이 GROUP BY 또는 ROLLUP 뒤에 기재되어야 한다는 점만 숙지하고 쿼리를 작성한다.

- ORDER BY 구문을 활용해 계층 내 정렬에 사용이 가능하며, SQL의 결과를 보다 체계적으로 보여 준다.

 

② CUBE 함수

- 결합 가능한 모든 값에 대해 다차원 집계를 생성하는 그룹 함수이다.

- 연산이 많아 시스템에 부담을 준다. 

 

③ GROUPING SETS 함수

- 집계 대상 컬럼들에 대한 개별 집계를 구할 수 있으며, ROLLUP이나 CUBE와는 달리 컬럼 간 순서와 무관한 결과를 얻을 수 있는 그룹 함수이다. 

- GROUPING SETS를 이용해 다양한 소계 집합을 만들 수 있다.

- ORDER BY를 사용하여 집계 대상 그룹과의 표시 순서를 조정하여 체계적으로 보여줄 수 있다.

 

 

(5) 윈도 함수

- 윈도 함수는 데이터베이스를 사용한 온라인 분석 처리 용도로 사용하기 위해서 표준 SQL에 추가된 함수이다.

- 윈도 함수를 OLAP 함수라고도 한다. 

 

1. 순위 함수

순위 함수 설명
RANK 특정 항목(컬럼)에 대한 순위를 구하는 함수
동일 순위의 레코드 존재 시 후순위는 넘어감
DENSE_RANK 레코드의 순위를 계산
동일 순위의 레코드 존재 시에도 후순위를 넘어가지 않음(2위, 2위, 2위, 3위, 4위....)
ROW_NUMBER 레코드의 순위를 계산
동일 순위의 값이 존재해도 이와 무관하게 연속 번호를 부여(2위, 3위, 4위, 5위, 6위...)