본문 바로가기
DB/MS-SQL

[MSSQL] 집계 함수(GROUP BY, HAVING)

by KeepCoding 2020. 7. 27.

GROUP BY는 대개 AVG, SUM, MIN, MAX, COUNT 와 같은 집계함수와 같이 사용합니다.

그렇기 때문에 집계함수에 대해 먼저 알아 보겠습니다.

 

[집계함수]

INSERT INTO test_Table (NO, NAME, AGE) VALUES (1, 'HONG', 10)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (2, 'LEE', 11)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (3, 'KIM', 10)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (4, 'HONG', 27)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (5, 'LEE', 11)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (6, 'JANG', 10)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (7, 'HAN', 24)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (8, 'JANG', 19)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (9, 'WANG', 27)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (10, 'HAN', 31)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (11, 'WANG', 24)


-AVG
SELECT AVG(AGE) AS 평균나이 FROM test_Table;
결과:
평균나이
19

-SUM
SELECT SUM(AGE) AS 나이합계 FROM test_Table;
결과:
나이합계
204

-MIN
SELECT MIN(AGE) AS 최저나이 FROM test_Table;
결과:
최저나이
10

-MAX
SELECT MAX(AGE) AS 최고나이 FROM test_Table;
결과:
최고나이
31

-COUNT
SELECT COUNT(NO) AS 사람수 FROM test_Table;
결과:
사람수
11

 

 

 

[GROUP BY & HAVING]

이러한 집계함수과 많이 사용하는 GROUP BY절과 HAVING절에 대해 알아보겠습니다.

INSERT INTO test_Table (NO, NAME, AGE) VALUES (1, 'HONG', 15)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (2, 'LEE', 11)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (3, 'KIM', 10)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (4, 'KIL', 23)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (5, 'HONG', 19)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (6, 'LEE', 11)
INSERT INTO test_Table (NO, NAME, AGE) VALUES (7, 'KIL', 21)

- [GROUP BY]
- 문법
SELECT 컬럼명 FROM 테이블 GROUP BY 컬럼명

- 예제
- 이름으로 그룹지어 이름,평균나이 조회
SELECT NAME, AVG(AGE) AS 평균나이 FROM test_Table GROUP BY NAME
- 결과
NAME	평균나이
HONG	17
LEE	11
KIL 22
KIM	10



-[HAVING]
GROUP BY 에선 WHERE절 대신 HAVING을 사용합니다.
HAVING은 GROUP BY로 그룹화한 그룹에 대해서만 조건을 추가합니다.

-예제
-이름에 'K'가 들어간 사람들로 그룹지어 이름,최고나이 조회
SELECT NAME, MAX(AGE) AS 최고나이 FROM test_Table GROUP BY NAME HAVING NAME LIKE '%K%'
-결과
NAME	최고나이
KIL	23
KIM	10

 

댓글