CS공부/SQL

GROUP BY절, HAVING절

티코딩 2024. 1. 19. 11:52

ㅇ 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이 넘는 값을 찾는다.