MySQL에서 테이블의 마지막 행에 전체 합계를 표시하려면 UNION 연산자를 활용하면 됩니다. UNION은 두 개 이상의 SELECT 쿼리 결과를 하나로 결합해 주는 역할을 하므로, 원본 데이터를 조회하는 쿼리와 SUM() 함수로 합계를 계산하는 쿼리를 연결하면 원하는 결과를 얻을 수 있습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다. 학생 ID, 이름, 점수 세 개의 컬럼으로 구성된 간단한 테이블입니다.
mysql> create table showSumInLastRowDemo
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> StudentMarks int
-> );
Query OK, 0 rows affected (0.69 sec)
2. 데이터 삽입
INSERT 문을 사용하여 학생별 점수 데이터를 입력합니다.
mysql> insert into showSumInLastRowDemo(StudentName,StudentMarks) values('John',56);
Query OK, 1 row affected (0.14 sec)
mysql> insert into showSumInLastRowDemo(StudentName,StudentMarks) values('John',87);
Query OK, 1 row affected (0.10 sec)
mysql> insert into showSumInLastRowDemo(StudentName,StudentMarks) values('John',52);
Query OK, 1 row affected (0.17 sec)
mysql> insert into showSumInLastRowDemo(StudentName,StudentMarks) values('Carol',97);
Query OK, 1 row affected (0.12 sec)
mysql> insert into showSumInLastRowDemo(StudentName,StudentMarks) values('Larry',75);
Query OK, 1 row affected (0.14 sec)
mysql> insert into showSumInLastRowDemo(StudentName,StudentMarks) values('Larry',98);
Query OK, 1 row affected (0.10 sec)
mysql> insert into showSumInLastRowDemo(StudentName,StudentMarks) values('Carol',73);
Query OK, 1 row affected (0.14 sec)
3. 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from showSumInLastRowDemo;
실행 결과는 다음과 같습니다.
+-----------+-------------+--------------+
| StudentId | StudentName | StudentMarks |
+-----------+-------------+--------------+
| 1 | John | 56 |
| 2 | John | 87 |
| 3 | John | 52 |
| 4 | Carol | 97 |
| 5 | Larry | 75 |
| 6 | Larry | 98 |
| 7 | Carol | 73 |
+-----------+-------------+--------------+
7 rows in set (0.00 sec)
4. UNION으로 마지막 행에 합계 표시하기
아래 쿼리가 MySQL에서 테이블의 마지막 행에 합계를 표시하는 핵심 방법입니다. 첫 번째 SELECT 문은 원본 데이터를 그대로 조회하고, 두 번째 SELECT 문은 SUM() 함수로 전체 점수 합계를 계산한 뒤 별칭을 붙여 반환합니다. 이 두 결과를 UNION으로 결합하면 합계가 마지막 행에 추가됩니다.
mysql> (select StudentName,StudentMarks from showSumInLastRowDemo)
-> UNION
-> (select 'TotalMarksOfAllStudent' as StudentName,sum(StudentMarks) StudentMarks from showSumInLastRowDemo);
실행 결과는 다음과 같습니다.
+------------------------+--------------+
| StudentName | StudentMarks |
+------------------------+--------------+
| John | 56 |
| John | 87 |
| John | 52 |
| Carol | 97 |
| Larry | 75 |
| Larry | 98 |
| Carol | 73 |
| TotalMarksOfAllStudent | 538 |
+------------------------+--------------+
8 rows in set (0.00 sec)
결과를 보면 마지막 행에 'TotalMarksOfAllStudent'라는 라벨과 함께 전체 점수 합계인 538이 출력된 것을 확인할 수 있습니다.
추가 팁
- UNION vs UNION ALL: UNION은 기본적으로 중복된 행을 제거합니다. 데이터에 동일한 값이 있어도 모두 표시하려면 UNION ALL을 사용하는 것이 안전합니다.
- 정렬이 필요한 경우: ORDER BY 절을 함께 사용하면 데이터 순서를 정렬하면서 합계 행의 위치를 명확하게 제어할 수 있습니다.
- 컬럼 타입 일치: UNION으로 결합되는 두 SELECT 문은 컬럼의 개수와 데이터 타입이 호환되어야 하므로, 합계 행에도 같은 구조의 별칭을 지정해 주는 것이 좋습니다.