개요
MySQL에서는 SUM()과 같은 집계 함수를 사용하지 않고도 여러 열(column)의 값을 손쉽게 더할 수 있습니다. 방법은 아주 간단합니다. SELECT 문에서 산술 연산자(+)로 원하는 열들을 직접 더한 뒤, 그 결과에 별칭(Alias)을 붙여 출력하면 됩니다.
기본 문법
SELECT *, (컬럼명1 + 컬럼명2 + 컬럼명3 + ...N) AS 별칭 FROM 테이블명;
예제 테이블 생성
문법을 이해하기 위해 먼저 예제 테이블을 만들어 보겠습니다. 학생별 과목 점수를 저장하는 테이블입니다.
mysql> create table AddingColumnDemo
-> (
-> StudentId int,
-> StudentName varchar(20),
-> MathMarks int,
-> PhysicsMarks int,
-> ChemistryMarks int
-> );
Query OK, 0 rows affected (0.82 sec)
데이터 삽입
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into AddingColumnDemo values(1,'John',35,45,76); Query OK, 1 row affected (0.25 sec) mysql> insert into AddingColumnDemo values(2,'Bob',67,76,88); Query OK, 1 row affected (0.19 sec) mysql> insert into AddingColumnDemo values(3,'Carol',45,56,43); Query OK, 1 row affected (0.16 sec) mysql> insert into AddingColumnDemo values(4,'Mike',82,75,71); Query OK, 1 row affected (0.21 sec) mysql> insert into AddingColumnDemo values(5,'Sam',92,89,88); Query OK, 1 row affected (0.23 sec)
저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from AddingColumnDemo;
실행 결과는 다음과 같습니다.
+-----------+-------------+-----------+--------------+----------------+ | StudentId | StudentName | MathMarks | PhysicsMarks | ChemistryMarks | +-----------+-------------+-----------+--------------+----------------+ | 1 | John | 35 | 45 | 76 | | 2 | Bob | 67 | 76 | 88 | | 3 | Carol | 45 | 56 | 43 | | 4 | Mike | 82 | 75 | 71 | | 5 | Sam | 92 | 89 | 88 | +-----------+-------------+-----------+--------------+----------------+ 5 rows in set (0.00 sec)
집계 함수 없이 열 값 더하기
이제 수학, 물리, 화학 세 과목 점수를 모두 더한 총점을 구하는 쿼리를 실행해 보겠습니다. SUM() 함수 대신 + 연산자만 사용했다는 점에 주목하세요.
mysql> select *,(MathMarks+PhysicsMarks+ChemistryMarks) as TotalResult from AddingColumnDemo;
아래 출력 결과에서 TotalResult 열에 각 학생의 세 과목 점수 합계가 표시됩니다.
+-----------+-------------+-----------+--------------+----------------+-------------+ | StudentId | StudentName | MathMarks | PhysicsMarks | ChemistryMarks | TotalResult | +-----------+-------------+-----------+--------------+----------------+-------------+ | 1 | John | 35 | 45 | 76 | 156 | | 2 | Bob | 67 | 76 | 88 | 231 | | 3 | Carol | 45 | 56 | 43 | 144 | | 4 | Mike | 82 | 75 | 71 | 228 | | 5 | Sam | 92 | 89 | 88 | 269 | +-----------+-------------+-----------+--------------+----------------+-------------+ 5 rows in set (0.00 sec)
참고: NULL 값 처리
+ 연산자로 열을 더할 때 한 가지 주의할 점이 있습니다. 더하는 열 중 하나라도 값이 NULL이면 전체 결과가 NULL로 반환됩니다. 따라서 NULL이 포함될 가능성이 있는 열이라면 IFNULL() 또는 COALESCE() 함수를 함께 사용해 NULL을 0으로 처리하는 것이 안전합니다.
SELECT *,
(IFNULL(MathMarks,0) + IFNULL(PhysicsMarks,0) + IFNULL(ChemistryMarks,0)) AS TotalResult
FROM AddingColumnDemo;