Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 SUM() OVER 절로 단일 열 누적 합계 구하는 방법

MySQL에서 특정 방식으로 단일 열의 값을 합산하려면 집계 함수 SUM()과 윈도우 함수인 OVER 절을 함께 사용합니다. OVER 절 안에 ORDER BY를 지정하면 각 행 기준으로 첫 번째 행부터 현재 행까지의 누적 합계(running total)가 계산됩니다.

1단계 — 테이블 생성하기

먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable
    (
    CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    CustomerValue int
    );
Query OK, 0 rows affected (0.64 sec)

2단계 — 데이터 삽입하기

insert 명령어를 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable(CustomerValue) values(10);
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable(CustomerValue) values(20);
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable(CustomerValue) values(30);
Query OK, 1 row affected (0.23 sec)

mysql> insert into DemoTable(CustomerValue) values(40);
Query OK, 1 row affected (0.14 sec)

3단계 — 전체 레코드 조회하기

select 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+------------+---------------+
| CustomerId | CustomerValue |
+------------+---------------+
|          1 |            10 |
|          2 |            20 |
|          3 |            30 |
|          4 |            40 |
+------------+---------------+
4 rows in set (0.00 sec)

4단계 — 누적 합계 쿼리 실행하기

다음은 SUM() OVER를 사용해 특정 방식으로 단일 열의 값을 합산하는 쿼리입니다. ORDER BY CustomerId를 지정했기 때문에 고객 ID 순서대로 값이 차례로 누적되어 더해집니다.

mysql> select CustomerId,
    SUM(CustomerValue) OVER (ORDER BY CustomerId) SpecificSum from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+------------+-------------+
| CustomerId | SpecificSum |
+------------+-------------+
|          1 |          10 |
|          2 |          30 |
|          3 |          60 |
|          4 |         100 |
+------------+-------------+
4 rows in set (0.00 sec)

결과 해석

출력 결과에서 각 행의 SpecificSum 값이 어떻게 계산되었는지 살펴보겠습니다.

  • CustomerId 1 → 10 (첫 번째 값 그대로)
  • CustomerId 2 → 10 + 20 = 30
  • CustomerId 3 → 10 + 20 + 30 = 60
  • CustomerId 4 → 10 + 20 + 30 + 40 = 100

이처럼 SUM() OVER (ORDER BY ...) 구문을 활용하면 단순한 전체 합계가 아니라, 지정한 정렬 순서에 따라 증가하는 누적 합계를 손쉽게 구할 수 있습니다. 참고로 윈도우 함수 기능은 MySQL 8.0 이상 버전에서 지원되므로, 하위 버전을 사용 중이라면 먼저 버전을 확인해야 합니다.