GROUP BY, HAVING

정다운·2023년 3월 13일
0

MSSQL

목록 보기
2/5

GROUP BY, HAVING

집계 함수와 함계 많이 사용되는 절이 GROUP BY 절이다.

예를 들면, 어떤 테이블에 카테고리 분류 열이 있다면 각 카테고리별로 그룹을 만들 수 있다.

각 카테고리별로 그룹을 묵으면 그룹별 편균 등을 집계하기 좋다.

GROUP은 결국 특정 컬럼을 기준으로 집계를 낸다는 뜻이다.

[1] 기본 형식

SELECT [GROUP BY 절의 지정 컬럼], [집계할 값]

FROM [테이블명]

GROUP [그룹 묶을 컬럼];

[2] titles 테이블에서 각 type 별로 카테고리를 그룹지어서 출력하시오.

SELECT type, AVG(price) AS 평균

FROM dbo.titles

GROUP BY type;

[3] 정렬도 가능하다.

단, 평균으로 정렬시는 주의해야 한다. 특히 집계함수 사용시 주의.

SELECT type, AVG(price) AS ‘각 카테고리별 평균 책값’

FROM dbo.tiles;

GROUP BY type

—ORDER BY AVG(price) DESC:

ORDER BY type ASC

[4] 각 그룹 별로 카운트

SELECT type AS t , COUNT(type) AS ‘그룹별 책 갯수’, AVG(price) AS ap

FROM dbo.tiles

GROUP BY type

ORDER BY ap DESC;

[5] 조건도 가능하다.

이때 HAVING 절을 사용하면 된다.

HAVING은 GROUP BY로 가져온 결과 값에 대해서 조건을 붙여 원하는 값만 출력시킬수 있다.

예) 각 카테고리 별로 그룹을 묶어서 출력시 평균 책값이 15달러 이상만 출력하시오

SELECT type, AVG(price) AS ‘각 카테고리별 평균 책값’

FROM dbo.titles

GROUP BY type

HAVING AVG(price) ≥15;

HVAING 절은 GROUP BY절 뒤에 쓴다.

GROUP BY절로 그룹지어 가져온 결과 값에 대해서 조건을 붙여주는 것 이기때문이다.

[6] WHERE 절과 HAVING 절을 같이 사용할때는 주의해야 한다.

WHERE > GROUP BY > HAVING 절의 순서로 기억하자.

예) 팩 가격이 11달러 이상에서 각 카테고리 타입별로 묶어서 평균 가격이 17달러 이상만 출력하시오.

SELECT type, AVG(price) AS ‘ 각 카테고리별 평균 책값’

FROM dbo.titles

WHERE price ≥11

GROUP BY type

HAVING AVG(price) ≥17;

ORDER BY AVG(price) ASC:

[7] GROUP BY ALL

GROUP BY 로 각 카테고리별 평균을 구할 때 조건에 맞는 값이 없는 경우도 나올 수 있다.

그럼 NULL 값을 가지는데 일반적인 경우 GROUP BY는 그런 NULL을 출력하지 않는다.

ALL은 반대로 그럴 때 사용하며 NULL을 그대로 출력시켜 준다.

따라서 ALL을 사용하면 조건에서 어떤 항목이 제외되었는지를 명확히 알 수 있게 된다.

즉, 어떤 항목이 제외되었는지를 명확히 나타내고자 할 때 사용한다.

SELECT type, AVG(price) AS ‘평균가격’

FROM dbo.titles

WHERE price ≥21

GROUP BY type

SELECT type, AVG(price) AS ‘평균가격’

FROM dbo.titles

WHERE price ≥21

GROUP BY All type

[8] GROUP BY ALL과 NOT IN 사용 쿼리

SELECT type, AVG(price) AS ‘평균가격’

FROM dbo.titles

WHERE type NOT IN('mod_cook', 'psychology', 'trad_cook', 'UNDECIDED')

GROUP BY type

ORDER BY AVG(price) DESC:

SELECT type, AVG(price) AS ‘평균가격’

FROM dbo.titles

WHERE type NOT IN('mod_cook', 'psychology', 'trad_cook', 'UNDECIDED')

GROUP BY All type

ORDER BY AVG(price) DESC:

profile
시작 블로그

0개의 댓글