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

MySQL에서 집계 함수(SUM) 없이 열 값을 더하는 방법

개요

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;