MySQL에서 SUM과 IF를 조합하여 특정 조건을 만족하는 데이터의 건수를 구하려면 다음과 같은 방식으로 작성할 수 있습니다.
이 조합은 조건에 따라 데이터를 필터링하고 합계를 계산하거나 건수를 세는 데 유용합니다.
SELECT SUM(IF(조건, 1, 0)) AS 건수 FROM 테이블명;
| ID | Status |
| 1 | active |
| 2 | inactive |
| 3 | active |
| 4 | inactive |
| 5 | active |
SELECT SUM(IF(Status = 'active', 1, 0)) AS active_count FROM my_table;
active_count
| 3 |
조건별로 건수를 나누어 계산할 수 있습니다.
| ID | Status |
| 1 | approved |
| 2 | pending |
| 3 | approved |
| 4 | rejected |
| 5 | approved |
SELECT
SUM(IF(Status = 'approved', 1, 0)) AS approved_count,
SUM(IF(Status = 'pending', 1, 0)) AS pending_count,
SUM(IF(Status = 'rejected', 1, 0)) AS rejected_count
FROM my_table;
| approved_count | pending_count | rejected_count |
| 3 | 1 | 1 |
그룹별 조건을 만족하는 데이터의 건수를 계산할 수도 있습니다.
| Department | Status |
| HR | active |
| IT | active |
| HR | inactive |
| IT | active |
| HR | active |
SELECT
Department,
SUM(IF(Status = 'active', 1, 0)) AS active_count
FROM my_table
GROUP BY Department;
| Department | active_count |
| HR | 2 |
| IT | 2 |
IF에서 반환값을 1과 0이 아닌 다른 값으로 설정해 특정 조건에 따른 합계를 계산할 수도 있습니다.
| ID | Score | Status |
| 1 | 10 | active |
| 2 | 20 | inactive |
| 3 | 30 | active |
| 4 | 40 | inactive |
| 5 | 50 | active |
SELECT SUM(IF(Status = 'active', Score, 0)) AS active_score_sum
FROM my_table;
active_score_sum
| 90 |
| mysql Error Code: 1046 해결 방법 (0) | 2025.02.06 |
|---|---|
| sql 쿼리에서 데이터가 'com.' 으로 시작하는 값 조회하는 쿼리는? (0) | 2025.02.06 |
| db safer 접속ip 변경하는 방법 (0) | 2025.01.21 |
| 데이터베이스 쿼리 left join, (+) 표기하는 방식 차이 (0) | 2025.01.08 |
| 데이터 타입 int, bigint 차이 (0) | 2025.01.08 |