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

MySQL에서 동일한 ID를 가진 행의 합계(SUM) 구하기 – GROUP BY와 HAVING 활용법

MySQL에서 동일한 ID를 가진 여러 행의 합계를 구하려면 GROUP BY 절과 HAVING 절을 함께 사용하면 됩니다. GROUP BY는 같은 ID끼리 행을 하나의 그룹으로 묶어주고, HAVING은 그룹화된 결과에 조건을 적용해 원하는 그룹만 필터링합니다.


먼저 예제에 사용할 테이블을 생성해 보겠습니다.

테이블 생성

mysql> create table demo84
-> (
-> id int,
-> price int
-> )
-> ;
Query OK, 0 rows affected (0.60 sec)

레코드 삽입

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

mysql> insert into demo84 values(1,2000);
Query OK, 1 row affected (0.08 sec)

mysql> insert into demo84 values(1,2000);
Query OK, 1 row affected (0.14 sec)

mysql> insert into demo84 values(2,1800);
Query OK, 1 row affected (0.14 sec)

mysql> insert into demo84 values(2,2200);
Query OK, 1 row affected (0.14 sec)

mysql> insert into demo84 values(3,1700);
Query OK, 1 row affected (0.12 sec)

데이터 조회

SELECT 문을 사용하여 테이블에 저장된 레코드를 확인합니다.

mysql> select *from demo84;

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

출력 결과

+------+-------+
| id | price |
+------+-------+
| 1 | 2000 |
| 1 | 2000 |
| 2 | 1800 |
| 2 | 2200 |
| 3 | 1700 |
+------+-------+
5 rows in set (0.00 sec)

동일한 ID의 합계 구하기

다음은 동일한 id를 가진 행들의 price 합계를 구하는 쿼리입니다. GROUP BY id로 ID별로 그룹화한 뒤, HAVING 절을 사용해 합계가 2000 이상인 그룹만 조회합니다.

mysql> select id,sum(price) as Total from demo84
-> group by id
-> having sum(demo84.price) >=2000;

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

출력 결과

+------+-------+
| id | Total |
+------+-------+
| 1 | 4000 |
| 2 | 4000 |
+------+-------+
2 rows in set (0.00 sec)

실행 결과를 살펴보면 id 1은 2000 + 2000 = 4000, id 2는 1800 + 2200 = 4000으로 각각 정상적으로 합산되었습니다. 반면 합계가 2000 미만인 id 3(1700)은 HAVING 조건에 의해 결과에서 제외된 것을 확인할 수 있습니다. 이처럼 GROUP BYHAVING을 조합하면 특정 조건을 만족하는 그룹별 집계 결과를 손쉽게 얻을 수 있습니다.