껄껄껄
코딩무새입니다.
MySQL에서 데이터의 그룹화는 왜 필요할까요?
대용량 데이터에서 유의미한 인사이트를 도출하기 위해서라고 할 수 있는데요.
데이터의 집계, 비교, 분석 등의 목적으로 사용할 수 있습니다.
GROUP BY?
GROUP BY 절은 SELECT 쿼리 내에서 특정 컬럼을 기준으로 데이터를 그룹화하는데요.
그룹화하여 동일한 값을 가진 레코드들을 묶어 요약 정보를 얻을 수 있게 해 줍니다.
예를 들어, 판매 데이터에서 각 제품별로 총판매량이나 평균 판매가격을 계산할 때 GROUP BY를 활용할 수 있습니다.
기본 문법
GROUP BY 기본 문법입니다.
SELECT {COLUMN1}, 집계함수({COLUMN2})
FROM {TABLE_NAME}
WHERE {CONDITION}
GROUP BY {COLUMN1};
COLUMN1은 그룹화의 기준이 되는 컬럼입니다.
집계함수는 각 그룹별로 적용할 함수로, SUM, AVG, MAX, MIN, COUNT 등이 있습니다.
예제 쿼리
예제로 사용할 테이블은 sales입니다.
상품 번호 / 가격 / 판매량 / 판매일로 구성되어 있죠.
SELECT * FROM sales;
+-----+------------+-------+----------+------------+
| uid | product_no | price | quantity | sale_date |
+-----+------------+-------+----------+------------+
| 1 | 1 | 100 | 1 | 2025-03-09 |
| 2 | 1 | 100 | 5 | 2025-03-07 |
| 3 | 2 | 500 | 4 | 2025-03-09 |
| 4 | 2 | 500 | 1 | 2025-03-09 |
| 5 | 3 | 1000 | 3 | 2025-03-09 |
| 6 | 1 | 100 | 10 | 2025-03-07 |
| 7 | 1 | 100 | 5 | 2025-03-06 |
| 8 | 2 | 500 | 3 | 2025-03-08 |
| 9 | 5 | 2000 | 3 | 2025-03-05 |
| 10 | 3 | 1000 | 1 | 2025-03-05 |
| 11 | 4 | 1500 | 1 | 2025-03-09 |
| 12 | 4 | 1500 | 2 | 2025-03-04 |
| 13 | 3 | 1000 | 4 | 2025-03-04 |
| 14 | 1 | 100 | 2 | 2025-03-04 |
| 15 | 2 | 500 | 2 | 2025-03-05 |
+-----+------------+-------+----------+------------+
15 rows in set (0.00 sec)
상품별 총판매량을 집계해서 보고 싶군요.
다음과 같이 쿼리를 짜봅니다.
SELECT product_no, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product_no
ORDER BY total_quantity DESC, product_no ASC;
+------------+----------------+
| product_no | total_quantity |
+------------+----------------+
| 1 | 23 |
| 2 | 10 |
| 3 | 8 |
| 4 | 3 |
| 5 | 3 |
+------------+----------------+
5 rows in set (0.00 sec)
상품별 총판매량이 집계되었습니다.
이번엔 일별 판매금액을 집계해 볼까요?
sale_date를 그룹화하여 가격을 합산해 줍니다.
SELECT sale_date, SUM(price) AS daily_price
FROM sales
GROUP BY sale_date
ORDER BY sale_date ASC;
+------------+-------------+
| sale_date | daily_price |
+------------+-------------+
| 2025-03-04 | 2600 |
| 2025-03-05 | 3500 |
| 2025-03-06 | 100 |
| 2025-03-07 | 200 |
| 2025-03-08 | 500 |
| 2025-03-09 | 3600 |
+------------+-------------+
6 rows in set (0.00 sec)
결과는 잘 집계되었네요.
주의사항
1. SELECT 절에 GROUP BY로 그룹화되지 않은 일반 컬럼을 사용하면 예측할 수 없는 결과를 초래할 수 있습니다.
GROUP BY 절에 포함하거나 집계 함수로 감싸서 사용하는 것을 권장합니다.
2. GROUP BY는 NULL 값을 하나의 그룹으로 취급합니다. NULL 값을 그룹화하고 싶지 않다면, 별도의 처리를 해주어야 하죠.
3. 데이터의 양이 많을 경우 GROUP BY 절의 사용은 쿼리 성능에 영향을 줄 수 있습니다. 이럴 땐 인덱스를 생성하는 것이 좋습니다.
GROUP BY에 대해서 포스팅해보았습니다.
데이터를 효과적으로 그룹화하고 집계할 수 있는 매우 유용하죠.
올바른 사용법과 주의사항을 숙지한다면,
다양한 데이터 분석 및 보고서 작성을 잘할 수 있습니다.
'IT무새 > Database' 카테고리의 다른 글
[MySQL] HAVING (0) | 2025.03.25 |
---|---|
[MySQL] LIKE 연산자 (3) | 2025.02.09 |
[MySQL] IN 연산자 (3) | 2025.02.06 |
[MySQL] Mysql에 CSV 데이터 Import | HeidiSQL (2) | 2025.02.01 |
[MySQL] 쿼리 조건 | WHERE Clause (2) | 2025.02.01 |