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

MySQL SELECT로 이전 값과 열 값 합산하기 – 세션 변수 활용 누적 합계 구하기

MySQL에서 열의 값을 이전 행의 값과 차례대로 더해 누적 합계(cumulative sum)를 구하려면 세션 변수(session variable)를 활용하는 방법이 가장 간단합니다. 세션 변수는 @ 기호로 선언되며, 한 세션 안에서 값이 계속 유지되기 때문에 각 행마다 이전 결과를 참조할 수 있습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable809(Price int);
Query OK, 0 rows affected (0.53 sec)

2. 데이터 삽입하기

INSERT 문으로 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable809 values(40);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable809 values(50);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable809 values(60);
Query OK, 1 row affected (0.12 sec)

3. 전체 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable809;

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

+-------+
| Price |
+-------+
|    40 |
|    50 |
|    60 |
+-------+
3 rows in set (0.00 sec)

4. 이전 값과 누적 합산하는 쿼리

아래 쿼리는 세션 변수 @currentSum에 각 행의 Price 값을 더해가며 누적 합계를 계산합니다.

mysql> select @currentSum:=@currentSum+Price from DemoTable809;

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

+--------------------------------+
| @currentSum:=@currentSum+Price |
+--------------------------------+
|                             40 |
|                             90 |
|                            150 |
+--------------------------------+
3 rows in set (0.00 sec)

결과를 보면 첫 번째 행은 40, 두 번째 행은 40+50=90, 세 번째 행은 90+60=150처럼 이전 값에 현재 값을 순차적으로 더한 누적 합계가 출력됩니다.

참고: 변수 초기화와 윈도우 함수 대안

세션 변수에 이전 실행의 값이 남아 있을 수 있으므로, 쿼리를 실행하기 전에 다음과 같이 초기화하는 것이 안전합니다.

mysql> set @currentSum := 0;
mysql> select @currentSum := @currentSum + Price AS cumulative_sum from DemoTable809;

또한 MySQL 8.0 이상 버전에서는 윈도우 함수를 사용해 더 깔끔하고 성능 좋게 누적 합계를 구할 수 있습니다.

mysql> select Price, sum(Price) over (order by Price) AS cumulative_sum from DemoTable809;