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

MySQL에서 SUM()과 IF()를 함께 사용하는 방법

MySQL에서 SUM()과 IF()를 함께 사용할 수 있나요?

네, MySQL에서는 SUM() 함수와 IF() 함수를 함께 사용할 수 있습니다. 이 조합은 특정 조건을 만족하는 행의 개수를 세거나 조건부 합계를 계산할 때 매우 유용합니다.

실제 예제를 통해 살펴보겠습니다.

1. 데모 테이블 생성

먼저 실습에 사용할 데모 테이블을 생성합니다:

mysql> create table DemoTable
(
    Value int,
    Value2 int
);
Query OK, 0 rows affected (0.51 sec)

2. 데이터 삽입

INSERT 명령을 사용하여 테이블에 레코드를 삽입합니다:

mysql> insert into DemoTable values(100,400);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(100,400);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(400,100);
Query OK, 1 row affected (0.14 sec)

3. 저장된 데이터 확인

SELECT 명령으로 테이블의 레코드를 조회해 보겠습니다:

mysql> select *from DemoTable;

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

+-------+--------+
| Value | Value2 |
+-------+--------+
|   100 |    400 |
|   100 |    400 |
|   400 |    100 |
+-------+--------+
3 rows in set (0.00 sec)

4. SUM()과 IF()를 활용한 조건부 집계

이제 SUM()과 IF()를 함께 사용하여 테이블에 값 100400이 각각 몇 번 등장하는지 계산해 보겠습니다:

mysql> SELECT SUM(IF(Value=100, 1, 0) + IF(Value2=100, 1, 0)) as Hundred,
SUM(IF(Value=400, 1, 0) + IF(Value2=400, 1, 0)) as FourHundred
FROM DemoTable;

실행 결과는 다음과 같습니다:

+---------+--------------+
| Hundred | FourHundred  |
+---------+--------------+
|       3 |            3 |
+---------+--------------+
1 row in set (0.00 sec)

쿼리 동작 원리

이 쿼리의 작동 방식은 다음과 같습니다:

IF(Value=100, 1, 0) — Value 열의 값이 100이면 1을 반환하고, 그렇지 않으면 0을 반환합니다.
IF(Value2=100, 1, 0) — Value2 열의 값이 100이면 1을 반환하고, 그렇지 않으면 0을 반환합니다.

두 조건식의 결과를 더한 후 SUM()으로 전체 행을 집계하면, 두 열을 모두 포함하여 값 100이 등장한 총 횟수(3회)와 값 400이 등장한 총 횟수(3회)를 구할 수 있습니다.

참고: CASE 표현식 대안

IF() 대신 표준 SQL인 CASE 표현식을 사용할 수도 있습니다:

SELECT SUM(CASE WHEN Value=100 THEN 1 ELSE 0 END 
        + CASE WHEN Value2=100 THEN 1 ELSE 0 END) as Hundred
FROM DemoTable;

CASE 표현식은 다른 데이터베이스(MySQL, PostgreSQL, Oracle 등) 간 호환성이 더 좋으므로, 이식성이 중요한 프로젝트라면 CASE 사용을 권장합니다.