MSSQL GROUP BY 절, HAVING 절 사용법
MS SQL에서 GROUP BY 절은 특정 열들을 그룹화하고 집계를 하기 위한 SELECT 문 절이고 대부분 집계 함수와 같이 사용됩니다. 그리고 HAVING 절은 GROUP BY 절에 의해 만들어지는 행을 제약하는 데 사용되고 일반적으로 GROUP BY 절과 함께 사용됩니다.
그럼 간단한 예제를 통해서 GROUP BY 절과 HAVING 절 사용법에 대해서 알아보죠.
포스트 기준
– Microsoft SQL Server 2019
– SSMS 18.11
1. GROUP BY 절
1. 구문(syntaxsql)
GROUP BY { column-expression } [ ,…n ]
▶ 허용 가능한 문장
SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA, ColumnB;
SELECT ColumnA + ColumnB FROM T GROUP BY ColumnA, ColumnB;
SELECT ColumnA + ColumnB FROM T GROUP BY ColumnA + ColumnB;
SELECT ColumnA + ColumnB + constant FROM T GROUP BY ColumnA, ColumnB;
▶ 허용 안 되는 문장
SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA + ColumnB;
SELECT ColumnA + constant + ColumnB FROM T GROUP BY ColumnA + ColumnB;
2. 샘플 데이터
▶ 수강과목 점수 데이터 (9건)
![샘플 데이터](https://bluesharehub.com/wp-content/uploads/2022/03/img_1-25.png)
![샘플 데이터](https://bluesharehub.com/wp-content/uploads/2022/03/img_1-25.png)
3. GROUP BY 사용 예제
▶ 학번, 성명을 그룹으로 수강 과목수, 총점, 평균점수, 가장 높은 점수, 가장 낮은 점수 구하기
-- 학번, 성명으로 그룹
SELECT P_ID AS '학번',
NAME AS '성명',
COUNT(*) AS '과목수',
SUM(SCORE) AS '총점',
AVG(SCORE) AS '평균점수',
MAX(SCORE) AS '가장높은점수',
MIN(SCORE) AS '가장낮은점수'
FROM BS_DEMO_8_4
GROUP BY P_ID, NAME -- 학번, 성명
![GROUP BY 사용 예제](https://bluesharehub.com/wp-content/uploads/2022/03/img_2-21.png)
![GROUP BY 사용 예제](https://bluesharehub.com/wp-content/uploads/2022/03/img_2-21.png)
2. HAVING 절
1. 구문(syntaxsql)
[ HAVING <search condition> ]
2. HAVING 사용 예제
▶ 학번, 성명을 그룹으로 수강 과목수, 총점, 평균점수, 가장 높은 점수, 가장 낮은 점수 중에서 평균점수가 80점 이상인 학생만 구하기 (평균점수 내림차순 정렬)
-- 학번, 성명으로 그룹
-- 평균점수가 80점 이상인 학생
-- 평균점수가 높은순으로 정렬
SELECT P_ID AS '학번',
NAME AS '성명',
COUNT(*) AS '과목수',
SUM(SCORE) AS '총점',
AVG(SCORE) AS '평균점수',
MAX(SCORE) AS '가장높은점수',
MIN(SCORE) AS '가장낮은점수'
FROM BS_DEMO_8_4
GROUP BY P_ID, NAME -- 학번, 성명
HAVING AVG(SCORE) >= 80 -- 평균점수가 80점 이상인 학생
ORDER BY AVG(SCORE) DESC -- 평균점수가 높은 학생순으로 정렬
![HAVING 사용 예제](https://bluesharehub.com/wp-content/uploads/2022/03/img_3-17.png)
![HAVING 사용 예제](https://bluesharehub.com/wp-content/uploads/2022/03/img_3-17.png)
이 글이 도움이 되셨다면 공유를 부탁드립니다. 다음 글에서 뵙겠습니다!