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

MySQL GROUP BY 완벽 가이드: 행을 그룹화하여 집계 결과 조회하기

MySQL에서 GROUP BY 절은 특정 컬럼의 값이 동일한 행들을 하나의 그룹으로 묶어주는 강력한 기능입니다. 주로 SUM, COUNT, AVG 같은 집계 함수와 함께 사용되어 그룹별 통계를 손쉽게 구할 수 있습니다.

이번 글에서는 예제 테이블을 직접 만들고, GROUP BY를 활용해 과목(Subject)별 가격(Price) 합계를 조회하는 전체 과정을 단계별로 살펴보겠습니다.

1단계: 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다. Id 컬럼은 자동 증가(AUTO_INCREMENT) 기본키로 설정했습니다.

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Subject varchar(20),
    Price int
    );
Query OK, 0 rows affected (0.64 sec)

2단계: 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 샘플 데이터를 넣어보겠습니다. 의도적으로 같은 과목명이 중복되도록 입력했습니다.

mysql> insert into DemoTable(Subject,Price) values('MySQL',456);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Subject,Price) values('MySQL',456);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Subject,Price) values('MongoDB',56);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Subject,Price) values('MongoDB',60);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Subject,Price) values('Java',100);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Subject,Price) values('Java',130);
Query OK, 1 row affected (0.15 sec)

3단계: 전체 데이터 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

출력 결과

+----+---------+-------+
| Id | Subject | Price |
+----+---------+-------+
| 1  | MySQL   | 456   |
| 2  | MySQL   | 456   |
| 3  | MongoDB | 56    |
| 4  | MongoDB | 60    |
| 5  | Java    | 100   |
| 6  | Java    | 130   |
+----+---------+-------+
6 rows in set (0.00 sec)

현재 각 과목별로 여러 개의 행이 존재합니다. 이 상태에서 과목별 가격 합계를 한눈에 보려면 GROUP BY가 필요합니다.

4단계: GROUP BY로 행 그룹화하기

다음은 GROUP BY 절을 사용해 Subject 컬럼을 기준으로 행을 묶고, SUM 함수로 Price의 합계를 구하는 쿼리입니다. AS 키워드를 사용해 결과 컬럼에 'Total'이라는 별칭을 지정했습니다.

mysql> select sum(Price) AS Total, Subject from DemoTable group by Subject;

출력 결과

+-------+---------+
| Total | Subject |
+-------+---------+
| 912   | MySQL   |
| 116   | MongoDB |
| 230   | Java    |
+-------+---------+
3 rows in set (0.04 sec)

결과 해석

GROUP BY를 적용한 결과, 원래 6개의 행이 과목별로 3개의 그룹으로 정리되었습니다.

  • MySQL: 456 + 456 = 912
  • MongoDB: 56 + 60 = 116
  • Java: 100 + 130 = 230

이처럼 GROUP BY는 동일한 값을 가진 행들을 하나의 그룹으로 묶고, 집계 함수를 통해 그룹 단위의 요약 정보를 제공합니다. 판매 데이터 집계, 카테고리별 통계, 일별 매출 분석 등 실무에서 매우 자주 활용되는 필수 문법이니 꼭 익혀두시기 바랍니다.