개요
MySQL에서는 사용자 정의 변수에 SUM() 함수의 결과(합계)를 저장한 뒤, UPDATE 명령으로 테이블을 갱신하여 계산된 합계를 마지막 열 값으로 표시할 수 있습니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 CREATE TABLE 문으로 데모용 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value int
);
Query OK, 0 rows affected (0.61 sec)2단계: 데이터 삽입
INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable(Value) values(70); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable(Value) values(100); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable(Value) values(150); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable(Value) values(250); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable(Value) values(60); Query OK, 1 row affected (0.22 sec)
3단계: 현재 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+-------+ | Id | Value | +----+-------+ | 1 | 70 | | 2 | 100 | | 3 | 150 | | 4 | 250 | | 5 | 60 | +----+-------+ 5 rows in set (0.00 sec)
4단계: 합계를 변수에 저장하고 테이블 업데이트
다음은 SUM() 결과를 변수 @Total에 저장한 후, 그 값을 Id가 5인 행의 Value 열에 반영하는 쿼리입니다.
mysql> set @Total=(select sum(Value) from DemoTable);
Query OK, 0 rows affected (0.00 sec)
mysql> update DemoTable
set Value= @Total
where Id=5;
Query OK, 1 row affected (0.16 sec)
Rows matched: 1 Changed: 1 Warnings: 05단계: 업데이트 결과 확인
업데이트 후 테이블 레코드를 다시 한번 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+-------+ | Id | Value | +----+-------+ | 1 | 70 | | 2 | 100 | | 3 | 150 | | 4 | 250 | | 5 | 630 | +----+-------+ 5 rows in set (0.00 sec)
정리
위 예제에서 Value 열의 전체 합계는 70 + 100 + 150 + 250 + 60 = 630입니다. SET 구문으로 변수 @Total에 합계를 저장한 뒤, UPDATE 문의 WHERE 조건(Id=5)을 통해 마지막 행에 해당 값을 대입하면 합계 결과가 테이블의 마지막 열 값으로 표시됩니다. 이 방식은 별도의 복잡한 서브쿼리 없이도 집계 결과를 기존 테이블에 손쉽게 반영할 수 있는 유용한 기법입니다.