MSSQL GROUP BY 절, HAVING 절 사용법

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   -- 학번, 성명
GROUP BY 사용 예제

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 사용 예제


이 글이 도움이 되셨다면 공유를 부탁드립니다. 다음 글에서 뵙겠습니다!

위로 스크롤