새로운 집계함수 PRODUCT()
시대적 변화와 필요한 요구 사항은 끝없이 요청되고 반영되는 것 같습니다. SQL Server 2025의 새로운 TSQL 함수 중 개인적으로 눈에 뛴 것이 바로 PRODUCT() 함수입니다. 이름만으로도 앗 혹시 그건가? 라고 충분히 짐작 가능한 목적의 함수였습니다.
1. 누적곱(데카르트곱) 계산, PRODUCT
기존의 SUM() 또는 AVG() 등은 누적합(시그마)을 구하는 연산입니다. 반면에 누적곱을 구하는 함수는 없었죠. 아마도 회계 관련 사용자들이 이 함수의 추가를 가장 많이 요구했을 것으로 짐작됩니다. PRODCT()의 구문과 추가 설명은 Microsoft Lean의 공식 문서를 참고하시고 아래는 기본 구문 형식입니다. 수치형 값을 대상으로 집계하며 NULL값은 제외됩니다 그리고 OVER()를 통해 Window 함수로 사용 가능함을 알 수 있습니다.
PRODUCT ( [ ALL | DISTINCT ] expression )
PRODUCT ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
간단한 예제는 아래와 같다.
SELECT pgroup, PRODUCT(value) AS value
FROM (
VALUES (2.0,'A'),
(3, 'A'),
(4, 'B'),
(5.0,'B'),
(6.5,'C') ) AS MyTable(value, pgroup)
GROUP BY pgroup;
pggroup value
A 6.000000
B 20.000000
C 6.500000
2. 어디에 필요한가?
대표적으로 복리 이자율, 투자 수익률, 조합 확률, 기하 평균 등에서 누적곱 연산을 이용할 수 있습니다. 복리 이자율 계산을 예를 들어 간단한 예제를 보겠습니다. 연간 5% 이자를 계약으로 3년 간의 복리 이자 적용 후 최종 금액을 출력합니다.
— 1. 투자 이자율 테이블 생성 (복수형 명명 규칙 준수)
CREATE TABLE dbo.Rates (
InvestmentYear int PRIMARY KEY,
Rate decimal(5, 4) — 예: 0.05은 5%를 의미
);
— 2. 3년간의 고정 이자율 데이터 삽입
INSERT INTO dbo.Rates (InvestmentYear, Rate)
VALUES
(2025, 0.05),
(2026, 0.05),
(2027, 0.05);
GO
— 3. 원금과 이자율을 기반으로 최종 금액 계산
DECLARE @principal decimal(18, 0) = 1000000; — 원금
SELECT
@principal AS 원금,
— (1 + 이자율)을 모두 곱하여 최종 수익률 계수
PRODUCT(1 + Rate) AS 수익률,
— 원금에 수익률 계수를 곱하여 최종 금액 산출
CAST(@principal * PRODUCT(1 + Rate) AS decimal(18, 0)) AS 최종금액
FROM dbo.Rates;
원금 수익률 최종금액
1000000 1.157625 1157625
— 정리
DROP TABLE IF EXISTS dbo.Rates;
마치면서
다음에는 ANSI 표준 연산자 || 를 다루겠습니다.
감사합니다.


