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건)

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 -- 학번, 성명
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 -- 평균점수가 높은 학생순으로 정렬
함께 보면 좋은 게시글
- MSSQL COUNT, SUM, AVG, MAX, MIN 사용법 – 집계 함수
- MSSQL DISTINCT 중복 행 제거하는 방법 (SELELCT 절)
- MSSQL ORDER BY 절 데이터 정렬 방법(순서 지정) 오름차순, 내림차순
- MSSQL PIVOT(피벗), UNPIVOT 함수 – 행을 열로 변환하는 방법
- MSSQL ROLLUP, GROUPING 사용법 – 소계, 합계 구하기
이 글이 도움이 되셨다면 공유 부탁 드립니다.


![[SSMS] 로컬 서버(PC)에 설치한 MSSQL 서버 연결하는 방법](https://bluesharehub.com/wp-content/uploads/2022/02/img_41.png)
