MySQL Group by와 Having
GROUP BY
와 HAVING
은 MySQL에서 집계 쿼리를 작성할 때 주로 사용되는 절입니다. 이를 통해 데이터 그룹화 및 그룹에 대한 조건을 적용할 수 있습니다.
GROUP BY
: 동일한 값을 갖는 행들을 그룹으로 묶어줍니다. 예를 들어, 특정 컬럼의 값을 기준으로 데이터를 묶어 해당 그룹에 대해 합계, 평균 등의 집계 함수를 사용할 수 있습니다.HAVING
: 그룹화된 데이터에 조건을 적용할 때 사용합니다.WHERE
절과 비슷하지만,HAVING
은 집계 함수 (SUM
,AVG
,COUNT
등)를 사용할 수 있다는 점이 특징입니다.WHERE
는 그룹화되기 전에 행 필터링에 사용되고,HAVING
은 그룹화된 후 필터링에 사용됩니다.
다음 예제 쿼리를 통해 이를 설명해 보겠습니다.
예제 테이블: sales
product_id | category | amount |
---|---|---|
1 | A | 100 |
2 | B | 150 |
3 | A | 200 |
4 | B | 300 |
5 | A | 50 |
GROUP BY
와 HAVING
을 사용하는 예제 쿼리
sql
Copy code
SELECT category, SUM(amount) AS total_amount
FROM sales
GROUP BY category
HAVING total_amount > 200;
쿼리 설명:
SELECT category, SUM(amount) AS total_amount
: 각category
별로amount
를 합산하고, 그 결과를total_amount
라는 별칭으로 표시합니다.GROUP BY category
:category
컬럼을 기준으로 데이터를 그룹화합니다.HAVING total_amount > 200
: 그룹화된 결과에서total_amount
가 200보다 큰 그룹만 필터링합니다.
결과:
위 쿼리를 실행하면 다음과 같은 결과가 반환됩니다.
category | total_amount |
---|---|
A | 350 |
B | 450 |
위 결과는 각 카테고리(A
와 B
)에 대해 amount
를 합산한 후, total_amount
가 200보다 큰 경우만 남긴 것입니다.
요약
GROUP BY
: 데이터를 특정 기준으로 그룹화할 때 사용합니다.HAVING
: 그룹화된 데이터에 조건을 적용할 때 사용합니다. 집계 함수를 활용한 조건 필터링에 적합합니다.
WHERE
절은 그룹화 전에 개별 행을 필터링하고, HAVING
절은 그룹화된 결과를 필터링하는 역할을 합니다.
'Interview > DB' 카테고리의 다른 글
VARCHAR vs TEXT (0) | 2024.10.17 |
---|---|
MySQL DISTINCT (0) | 2024.10.17 |
Database Select Query (0) | 2024.10.17 |
Database Commit vs Rollback (0) | 2024.10.17 |
Database에서 ACID (0) | 2024.10.14 |