본문 바로가기
DataBase/MsSql

MSSQL GROUP BY 사용법 및 예제

by 아우럼 2024. 3. 23.
반응형

GROUP BY 절은 Database에서 자료를 추출할 때 특정 열을 그룹화하고 그룹 내에서 집계 함수를 사용해 data를 추출하는데 집계 함수는 SUM, COUNT, AVG, MAX, MIN, STDEV, STRING_GAG 주로 사용하고 합니다.

GROUP BY 문의 기본 구조

집계 함수를 제외한 COLUMN은 SELECT 절하고 GROUP BY 절에 동시에 선언해 줘야 합니다.
1. SELECT: 데이터를 가져오기 위한 COLUMN 선택합니다. 동시에 여러 집계 함수 사용도 가능합니다.
2. FROM: 데이터를 가져올 table 선언합니다.
3. GROUP BY: 그룹화할 COLUMN을 선언합니다.
4. ORDER BY: 기본적으로 GROUP BY 순서와 다르게 할 때 지정합니다.

GROUP BY 문의 기본 구조.

GROUP BY 절 사용 예제

기본적인 GROUP BY 절.

학급별로 국어 평균 점수를 AVG 함수를 이용하여 출력하는 예제입니다.

-- 202401월 학생의 국어 평균점수 구하는예제.
SELECT classNo
      ,AVG(korScore) AS korScoreAvg
 FROM UserInfoForGroupBy
WHERE scoreyyyymm = '202401'
GROUP BY classNo
order by classNo asc;

학급별로 국어 평균 점수를 AVG 함수를 이용하여 출력.

그룹 COLUMN을 여러 개 사용하여 GROUP BY 사용.

학생들의 성적을 월별, 학급별 그룹화하여 국어 평균 점수를 AVG 함수를 이용하여 출력하는 예제입니다.
그룹화를 여러 개 지정하면 Data row 수가 증가합니다.

-- 월별, 학급별  과목 국어 평균점수 구하는예제.
SELECT scoreyyyymm
      ,classNo
      ,AVG(korScore) AS korScoreAvg
 FROM UserInfoForGroupBy
WHERE scoreyyyymm  IN ('202401','202402')
GROUP BY classNo ,scoreyyyymm
order by scoreyyyymm ASC, classNo DESC;

COLUMN을 여러 개 사용하여 GROUP BY 사용.

집계 함수를 여러 개 사용.

학생들의 성적을 월별, 학급별 그룹화한 후 COUNT, SUM, AVG 함수를 이용하여 전체평균 점수를 구하는 예제입니다.

-- 월별, 학급별 과목합계와 전체 평균점수 구하는예제.
SELECT scoreyyyymm
      ,classNo
      ,COUNT(*) AS groupCount
      ,sum(korScore) AS korScoreSum
      ,sum(mathScore) AS mathScoreSum
      ,sum(engScore) AS engScoreSum
      ,sum(scienceScore) AS scienceScoreSum
      ,sum(societyScore) AS societyScoreSum
      ,AVG(korScore + mathScore + engScore + scienceScore + societyScore) / 5 AS ScoreAvg
 FROM UserInfoForGroupBy
WHERE scoreyyyymm  IN ('202401','202402')
GROUP BY classNo ,scoreyyyymm
order by scoreyyyymm ASC, classNo DESC;

집계 함수를 여러 개 사용 예제.

GROUP BY 하고 ORDER BY 동시에 사용.

GROUP BY 절 다음에 ORDER BY 절을 사용할 수 있으며, 그룹 칼럼 및 집계 함수를 사용하여 ORDER BY 절에서 정렬을 지정합니다.

-- ORDER BY 사용하여 최근월부터 표시 해주세요.
SELECT scoreyyyymm
      ,classNo
      ,sum(korScore) AS korScoreSum
 FROM UserInfoForGroupBy
WHERE scoreyyyymm  IN ('202401','202402')
GROUP BY classNo ,scoreyyyymm
order by scoreyyyymm DESC, classNo asc;

GROUP BY하고 ORDER BY 동시에 사용.

GROUP BY 절 HAVING 사용.

집계 함수의 결과를 서브 질의문을 사용하지 않고 조건절에 사용하고 싶은 경우 HAVING 절을 사용합니다.
HAVING 절하고 AVG 할 수를 이용하여 80점 이상은 학급만 출력할 수 있습니다.

-- HAVING 사용 하여 국어 평균점수 80 이상만 출력.
SELECT scoreyyyymm
      ,classNo
      ,avg(korScore) AS korScoreSum
 FROM UserInfoForGroupBy
WHERE scoreyyyymm  IN ('202401','202402')
GROUP BY classNo ,scoreyyyymm 
HAVING  avg(korScore) > 80;

GROUP BY 절 HAVING 사용.

GROUP BY 절에 STRING_AGG 사용하여 COLUMN 문자열 합치기 방법.

STRING_AGG은 row data를 하나의 column에 문자열 형태로 구분 값을 넣어서 합칠 수 있는 함수입니다.

-- STRING_AGG 사용하여 COLUMN 문자열 합치기 방법
SELECT classNo
      ,STRING_AGG(studentNm,',') AS studentNm
 FROM UserInfoForGroupBy
WHERE scoreyyyymm  IN ('202401')
  AND classNo  IN (1,2)
GROUP BY classNo;

GROUP BY 절에 STRING_AGG 사용하여 COLUMN 문자열 합치기 방법.

집계함수 설명

MSSQL 지원하는 기본적인 집계함수.

집계 함수 이름 COMMNET
COUNT 지정 그룹에서 COUNT를표시
SUM 지정 그룹에서 합계를 표시.
AVG 지정 그룹에서 평균값을 표시.
MAX 지정 그룹에서 최대값을 표시.
MIN 지정 그룹에서 최소값을 표시.
STDEV 지정 그룹에서 표준 편차를 구할때 사용.
STRING_AGG 지정 그룹에서 ROW DATA를 문자열로 합치기.

반응형