1. 집계 함수 기본 개념
- 집계 함수란
데이터 집합에 대해 계산을 수행하여 단일 결과를 반환하는 함수이다. - 주요 집계 함수
- COUNT: 행의 개수를 계산한다. (NULL 값은 제외됨)
- DISTINCT: 중복된 데이터는 계산하지 않는다. COUNT(DISTINCT 칼럼)
- SUM: 합계를 계산한다. (NULL 값은 제외됨)
- AVG: 평균값을 계산한다. (NULL 값은 제외됨)
- MIN: 최솟값을 반환한다.
- MAX: 최댓값을 반환한다.
- COUNT: 행의 개수를 계산한다. (NULL 값은 제외됨)
2. 집계 함수가 사용될 수 있는 곳
- FROM
- 데이터 원본(테이블 등)을 결정.
- WHERE
- 그룹화 이전에 개별 행을 필터링
- 집계 함수가 개별 행에 대해 즉시 계산되는 것이 아니라, 그룹화 이후에 계산 됨 -> 집계 함수 사용 불가.
- 서브쿼리 내부에서 집계 함수가 사용될 수 없다는 말은 아님.
- GROUP BY
- 지정한 칼럼 기준으로 데이터를 그룹화.
- HAVING
- 그룹화된 결과를 대상으로 필터링.
- 집계 함수 사용 가능.
- SELECT
- 최종 결과를 선택.
- 집계 함수 사용 가능.
- ORDER BY
- 결과를 정렬.
- 집계 함수 사용 가능.
예제 쿼리:
SELECT name, COUNT(name)
FROM 테이블명
WHERE 조건식
GROUP BY name
HAVING COUNT(name) = 1
ORDER BY COUNT(name);
3. GROUP BY 사용법
- 기본 사용법
GROUP BY는 지정한 칼럼을 기준으로 데이터를 그룹화하고, 각 그룹별로 집계 함수를 적용할 수 있다.
기본 구문:
SELECT 그룹화_칼럼, 집계함수(칼럼)
FROM 테이블명
GROUP BY 그룹화_칼럼;
- 예제: sales 테이블의 카테고리별 총합 계산
id | category | amount |
1 | A | 100 |
2 | B | 200 |
3 | A | 300 |
4 | B | 400 |
5 | C | 500 |
SELECT category, SUM(amount) AS total_amount
FROM sales
GROUP BY category;
category | total_amount |
A | 400 |
B | 600 |
C | 500 |
- 주의 사항
GROUP BY에 포함되지 않은 칼럼은 SELECT 절에서 집계 함수 없이 사용할 수 없다.
잘못된 예:
SELECT 칼럼1, SUM(칼럼2)
FROM 테이블명
GROUP BY 칼럼3;
올바른 예:
SELECT 칼럼2, SUM(칼럼1)
FROM 테이블명
GROUP BY 칼럼1;
4. HAVING과 WHERE의 차이
- WHERE 절
- 그룹화 이전에 개별 행을 필터링한다.
- 집계 함수 사용 불가.
- HAVING 절
- 그룹화 이후에 그룹별 결과를 필터링한다.
- 집계 함수 사용 가능.
예제:
SELECT category, SUM(amount) AS total_amount
FROM sales
GROUP BY category
HAVING SUM(amount) >= 500;
category | total_amount |
B | 600 |
C | 500 |
5. 다중 칼럼 GROUP BY
- 다중 칼럼 그룹화
다중의 칼럼의 값이 동일한 행들끼리 그룹화가 진행된다.
예제: orders 테이블
order_id | customer_id | product_id | quantity |
1 | A | 101 | 3 |
2 | A | 102 | 5 |
3 | A | 101 | 2 |
4 | B | 101 | 4 |
5 | B | 103 | 1 |
6 | C | 102 | 7 |
SELECT customer_id, product_id, COUNT(*) AS total_orders
FROM orders
GROUP BY customer_id, product_id;
customer_id | product_id | total_orders |
A | 101 | 2 |
A | 102 | 1 |
B | 101 | 1 |
B | 103 | 1 |
C | 102 | 1 |
'Server > DB' 카테고리의 다른 글
입문반 커리큘럼, 혼자 정리해보기 - 소수점을 처리하는 함수 (0) | 2025.03.30 |
---|---|
코테 준비를 위한 SQL 첫걸음 정리 - 복수의 테이블 다루기 [ 집합 연산, 조인 ] (0) | 2025.03.30 |
코테 준비를 위한 SQL 첫걸음 정리 - ORDER, AS, CASE, COALESCE (0) | 2025.03.25 |
코테 준비를 위한 SQL 첫걸음 정리 - Select (0) | 2025.03.25 |
SQL 코테 준비 (0) | 2025.03.16 |