GROUP BY절, HAVING절
ㅇ GROUP BY절
특정 기준으로 데이터를 그룹화할때 사용함. 묶음 처리의 기준은 두개 이상이 될 수 있음.
SELECT * FROM 테이블 WHERE 조건식 GROUP BY 기준1, 기준2
예를 들어 직원 테이블이 아래와 같다면,
성별 | 이름 | 나이 | 판매액 |
남 | 김태형 | 29 | 5,000 |
남 | 권태헌 | 27 | 10,000 |
여 | 김태순 | 29 | 20,000 |
여 | 권태순 | 27 | 1,000 |
SELECT 성별, SUM(판매액) AS 총판매액
FROM 직원
GROUP BY 성별
성별 | 총판매액 |
남 | 15,000 |
여 | 21,000 |
이렇게 된다.
위의SUM같은 함수를 집계함수라고한다.
ㅁ 집계함수
집계함수는 다양한 데이터값들을 한곳에모아서 계산하는것이다.
위에선 판매액의 SUM, 즉 합계를 구한것이다.
- COUNT : 특정 칼럼의 행의 수
- SUM : 특정 칼럼의 값을 더한값
- AVG : 특정 칼럼의 값들의 평균값
- MIN : 특정 칼럼의 값들중 최솟값
- MAX : 특정 칼럼의 값들중 최댓값
사용할땐 MAX(칼럼명) 이런식으로 사용한다.
ㅇ HAVING 절
GROUP BY 기준 으로 그룹화를 했다면 이후에 필터링 조건을 작성하는것이다. WHERE 절도 필터링하지만 FROM절 다음으로 처리되고 테이블 데이터에서 필터링되지만 HAVING절은 그룹화를 마친 데이터들을 필터링한다는 차이가 있다.
SELECT * FROM 테이블명 WHERE 조건식(필터링할 조건) GROUP BY 기준(그룹화할 기준) HAVING 조건식(그룹화 이후 필터링할 조건)
예를 들어 고객별 매출을 구하고 그값이 20,000이 초과하는 값만 구하고 싶다, 하면
OrderNo | OrderDate | City | CustomerId | SalesAmount |
1 | 2024-01-01 | 인천 | c100 | 5000 |
2 | 2024-01-02 | 인천 | c100 | 10000 |
3 | 2024-01-10 | 서울 | c001 | 10000 |
4 | 2024-01-13 | 서울 | c001 | 5000 |
5 | 2024-01-20 | 서울 | c001 | 5000 |
SELECT CustomerId, SUM(SalesAmount) AS 매출
FROM sales
GROUP BY Customer-id
HAVING SUM(SalesAmount) > 20000
CustomerId | 매출 |
c001 | 20000 |
기존에 SUM으로 SalesAmount 를 구하고 거기서 HAVING 절로 SalesAmount 20000이 넘는 값을 찾는다.