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

MySQL에서 다른 필드 값을 이용해 새로운 필드 값을 도출하는 방법

사용자 정의 변수(User-Defined Variable)란?

MySQL에서 한 필드의 값을 기반으로 다른 필드의 값을 도출하려면 사용자 정의 변수(user-defined variable) 개념을 활용할 수 있습니다. 사용자 정의 변수는 @ 기호로 선언되며, 쿼리가 행을 처리하는 과정에서 값을 누적하거나 참조할 수 있어 누적 합계(cumulative sum)를 계산할 때 특히 유용합니다.

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

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

샘플 데이터 삽입

insert 명령을 사용하여 테이블에 레코드를 몇 개 삽입합니다.

mysql> insert into DemoTable1868 values(10);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1868 values(20);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1868 values(30);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1868 values(40);
Query OK, 1 row affected (0.00 sec)

데이터 조회

select 문을 사용하여 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable1868;

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

+-------+
| Value |
+-------+
|    10 |
|    20 |
|    30 |
|    40 |
+-------+
4 rows in set (0.00 sec)

필드 값으로부터 새로운 필드 값 도출하기

다음은 MySQL에서 기존 필드(Value)의 값을 이용해 새로운 필드(SecondColumn)의 값을 도출하는 쿼리입니다.

mysql> select Value,(@iterator:=Value+@iterator) as SecondColumn from DemoTable1868,( select @iterator:=0) tbl;

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

+-------+--------------+
| Value | SecondColumn |
+-------+--------------+
|    10 |           10 |
|    20 |           30 |
|    30 |           60 |
|    40 |          100 |
+-------+--------------+
4 rows in set (0.00 sec)

쿼리 동작 원리

이 쿼리의 핵심은 ( select @iterator:=0 ) tbl 부분입니다. 서브쿼리를 통해 변수 @iterator를 0으로 초기화한 뒤, 각 행을 읽을 때마다 @iterator:=Value+@iterator 표현식이 현재 행의 Value 값과 이전까지 누적된 값을 더해 SecondColumn에 저장합니다.

그 결과 SecondColumn에는 10 → 30 → 60 → 100처럼 누적 합계(running total)가 순차적으로 계산되어 출력됩니다. 이러한 기법은 MySQL 8.0 이전 버전에서 윈도우 함수(SUM() OVER()) 없이 누적 합계를 구할 때 널리 사용됩니다. 참고로 MySQL 8.0 이상에서는 가독성과 성능 면에서 윈도우 함수를 사용하는 것이 권장됩니다.