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

MySQL에서 긍정 투표와 부정 투표 수를 계산하는 방법

MySQL에서 긍정(양수) 투표와 부정(음수) 투표의 개수를 각각 집계하려면 CASE 문과 집계 함수인 SUM()을 함께 사용하면 됩니다. 이 방법은 조건에 따라 값을 분류한 뒤 합산하는 방식으로, 하나의 쿼리로 두 가지 결과를 동시에 얻을 수 있어 매우 효율적입니다.

1. 예제 테이블 생성하기

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

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Vote int
);
Query OK, 0 rows affected (1.70 sec)

Id는 자동 증가되는 기본키이고, Vote 컬럼에는 투표 값(양수 또는 음수)이 저장됩니다.

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable(Vote) values(-10);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Vote) values(100);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Vote) values(45);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Vote) values(-6);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Vote) values(-1000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Vote) values(450);
Query OK, 1 row affected (0.14 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+----+-------+
| Id | Vote  |
+----+-------+
| 1  | -10   |
| 2  | 100   |
| 3  | 45    |
| 4  | -6    |
| 5  | -1000 |
| 6  | 450   |
+----+-------+
6 rows in set (0.00 sec)

총 6개의 레코드가 있으며, 그중 양수는 3개(-10 제외한 100, 45, 450), 음수도 3개(-10, -6, -1000)입니다.

4. 긍정/부정 투표 수를 집계하는 쿼리

다음은 CASE 문과 SUM() 함수를 활용해 긍정 투표와 부정 투표의 개수를 한 번에 계산하는 쿼리입니다.

mysql> select sum(case when Vote > 0 then 1 else 0 end) as Number_Of_Positive_Votes,
sum(case when Vote < 0 then 1 else 0 end) as Number_Of_Negative_Votes
from DemoTable;

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

+--------------------------+--------------------------+
| Number_Of_Positive_Votes | Number_Of_Negative_Votes |
+--------------------------+--------------------------+
| 3                        | 3                        |
+--------------------------+--------------------------+
1 row in set (0.00 sec)

쿼리 동작 원리

이 쿼리의 핵심은 CASE 문의 조건 평가 방식입니다.

긍정 투표 집계: Vote > 0 조건이 참이면 1을 반환하고, 거짓이면 0을 반환합니다. SUM()이 이 값들을 모두 더하면 조건을 만족하는 행의 개수, 즉 양수 투표의 개수가 됩니다.

부정 투표 집계: 마찬가지로 Vote < 0 조건이 참일 때만 1을 반환하므로, 음수 투표의 개수가 집계됩니다.

만약 0인 투표도 별도로 세고 싶다면 Vote = 0 조건을 추가하거나, ELSE 절을 활용해 세 번째 카테고리를 만들면 됩니다. 이처럼 CASE 문과 SUM()의 조합은 조건부 집계(Conditional Aggregation)의 대표적인 패턴으로, 다양한 통계 쿼리에서 폭넓게 활용할 수 있습니다.