PARTITION BY
<윈도우 함수>(컬럼) OVER (PARTITIOBY 컬럼1, 컬럼2, ... ORDER BY 정렬컬럼 [ASC | DESC])
- ORDER BY expresstion[DESC,ASC] : 정렬할 기준이될 컬럼 (선택)
- [PARTITION BY expression_list] : 부분집합 별로 순번 생성하기 위해서 부분집합을 지정하는 것 (GROUP BY)
예시 : row_number와 dense_rank
GROUP BY PARTITION BY(OVER) 비교
1. OVER(PARTITION BY) 사용하는 쿼리:
- OVER(PARTITION BY)는 윈도우 함수를 사용하여 행 집계를 수행합니다.
- 파티션 내에서 각 행에 대해 계산을 수행하므로, 데이터의 각 그룹에 대해 동적으로 결과를 계산합니다.
- 일반적으로 데이터베이스 엔진이 최적화된 윈도우 함수를 사용하여 파티션 내에서 작업을 병렬로 처리할 수 있습니다.
SELECT MAX(COM_NAME) OVER (PARTITION BY COM_REGNO) AS COM_NAME
, COM_REGNO
, MAX(REP_NAME) OVER (PARTITION BY COM_REGNO) AS REP_NAME
, MAX(DTI_TYPE) OVER (PARTITION BY COM_REGNO) AS DTI_TYPE
, MAX(DTI_TYPENM) OVER (PARTITION BY COM_REGNO) AS DTI_TYPENM
, COUNT(APPROVE_ID) OVER (PARTITION BY COM_REGNO) AS CNT
, SUM(SUP_AMOUNT) OVER (PARTITION BY COM_REGNO) AS SUP_AMOUNT
, SUM(TAX_AMOUNT) OVER (PARTITION BY COM_REGNO) AS TAX_AMOUNT
, SUM(TOTAL_AMOUNT) OVER (PARTITION BY COM_REGNO) AS TOTAL_AMOUNT
FROM 'DB명';
2. GROUP BY 사용하는 쿼리:
- GROUP BY는 집계 함수와 함께 사용하여 특정 열을 기준으로 데이터를 그룹화하고 각 그룹에 대한 집계를 수행합니다.
- 데이터베이스 엔진은 그룹화된 데이터 세트를 처리하고 각 그룹에 대한 집계를 계산합니다.
- GROUP BY는 전체 데이터 세트를 한 번 스캔하고 그룹화하여 결과를 생성합니다.
SELECT MAX(COM_NAME) AS COM_NAME, COM_REGNO
, MAX(REP_NAME) AS REP_NAME
, MAX(DTI_TYPE) AS DTI_TYPE
, MAX(DTI_TYPENM) AS DTI_TYPENM
, COUNT(APPROVE_ID) AS CNT
, SUM(SUP_AMOUNT) AS SUP_AMOUNT
, SUM(TAX_AMOUNT) AS TAX_AMOUNT
, SUM(TOTAL_AMOUNT) AS TOTAL_AMOUNT
FROM 'DB명'
GROUP BY COM_REGNO;
성능 비교 요소:
- 데이터 크기: 데이터 크기가 클수록 OVER(PARTITION BY)를 사용한 쿼리가 효율적입니다. 데이터를 한 번 스캔하고 원하는 파티션 내에서 계산을 수행하기 때문입니다.
- 인덱스: 그룹화된 열에 대한 인덱스가 있는 경우 GROUP BY를 사용한 쿼리가 빠를 수 있습니다. 인덱스를 사용하여 그룹화 및 집계를 빠르게 수행할 수 있습니다.
- 최적화: 데이터베이스 엔진의 최적화 기능은 사용된 쿼리와 데이터베이스 구성에 따라 다릅니다. 실제 실행 계획을 확인하고 비교하는 것이 가장 정확한 성능 평가 방법입니다.
일반적으로 데이터 크기가 크고 파티션 내에서 계산이 필요한 경우 OVER(PARTITION BY)를 사용한 쿼리가 효율적입니다. 하지만 실제 데이터와 데이터베이스 환경에 따라 최적의 방법은 달라질 수 있습니다.
반응형
'DB' 카테고리의 다른 글
NULL 처리함수 정리(IFNULL 함수와 NULLIF 함수의 차이점) + COALESCE 함수 (0) | 2024.12.10 |
---|---|
윈도우 함수 옵션 (0) | 2024.05.22 |
MSSQL 순위 함수 (ROW_NUMBER 와 DENSE_RANK) (0) | 2024.05.20 |
윈도우 함수 옵션 (0) | 2024.05.17 |
MS SQL CURSOR (0) | 2024.05.16 |