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

MySQL CROSS JOIN(교차 조인)으로 이전 행 값 누적 합산하기 – 현재 행까지의 합계를 다른 열에 표시하는 방법

MySQL에서 각 행에 대해 이전 행들의 값을 누적하여 합산하고, 그 결과를 별도의 열에 표시하려면 사용자 정의 변수와 CROSS JOIN(교차 조인)을 함께 활용하면 됩니다. 아래에서 단계별로 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable(Value int);
Query OK, 0 rows affected (1.79 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.68 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.18 sec)

3. 저장된 데이터 확인하기

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

mysql> select *from DemoTable;

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

+-------+
| Value |
+-------+
| 50 |
| 20 |
| 30 |
+-------+
3 rows in set (0.00 sec)

4. 이전 행 값의 누적 합계 구하기

이제 사용자 변수 @s를 0으로 초기화한 뒤, CROSS JOIN으로 해당 변수를 메인 쿼리와 결합하여 각 행마다 값을 더해 나가는 쿼리입니다.

mysql> select t.Value,
   (@s := @s + t.Value) as Number
   from DemoTable t cross join
      (select @s := 0) p
   order by t.Value;

5. 실행 결과 확인

위 쿼리를 실행하면 다음과 같이 각 행까지의 누적 합계가 Number 열에 표시됩니다.

+-------+--------+
| Value | Number |
+-------+--------+
| 20 | 20 |
| 30 | 50 |
| 50 | 100 |
+-------+--------+
3 rows in set (0.07 sec)

동작 원리 설명

(select @s := 0) p 부분은 변수 @s를 0으로 초기화하는 역할을 하며, CROSS JOIN을 통해 이 초기화 서브쿼리가 메인 테이블과 결합됩니다. 이후 각 행을 읽을 때마다 @s := @s + t.Value가 실행되어 현재 행의 값이 누적으로 더해집니다. 마지막으로 ORDER BY로 값을 정렬하면, 위 예제처럼 20 → 50 → 100 순서로 누적 합계가 계산된 것을 확인할 수 있습니다.