group by
: 레코드 조회 시 각 레코드를 하나의 그룹으로 묶어서 표현해 준다.
having
: group by를 통해 묶인 레코드 그룹에 조건을 걸어 준다.
(ex) 성적 테이블
일련번호 | 반정보 | 이름 | 점수 |
1 | A반 | 오이카와 | 90 |
2 | A반 | 쿠니미 | 95 |
3 | A반 | 오사무 | 85 |
4 | B반 | 키타 | 100 |
5 | B반 | 카게야마 | 85 |
6 | B반 | 쿠로오 | 90 |
성적 테이블을 반 별로 그룹화하고 반 인원을 표시하시오.
select count(반정보) as 반인원 from 성적 group by 반정보
반정보 | 인원 |
A반 | 3 |
B반 | 3 |
성적 테이블을 반별로 그룹화하고 반평균을 표시하시오.
select avg(점수) as 반평균 from 성적 group by 반정보
반정보 | 반평균 |
A반 | 90 |
B반 | 91 |
성적 테이블을 점수로 그룹화하고 각각의 인원을 표시하시오.
select count(점수) as 인원 from 성적 group by 점수
점수 | 인원 |
85 | 2 |
90 | 2 |
95 | 1 |
100 | 1 |
성적 테이블을 반별로 그룹화하고 각 그룹의 최고점수와 최저점수를 표시하시오.
select 반정보, max(점수) as 최고점수, min(점수) as 최저점수 from 성적 group by 반정보
반정보 | 최고점수 | 최저점수 |
A반 | 95 | 85 |
B반 | 100 | 85 |
성적 테이블을 반별로 그룹화하고 다시 90점 초과와 90점 이하로 그룹화한 후 각각의 인원을 표시하시오.
select 반정보, (case when 점수 > 90 then '90점 초과' else '90점 이하' end) as 조건, count(점수) as 인원
반정보 | 조건 | 인원 |
A반 | 90점 이하 | 2 |
A반 | 90점 초과 | 1 |
B반 | 90점 이하 | 2 |
B반 | 90점 초과 | 1 |
성적 테이블을 반별로 그룹화하고 90점 초과 인원을 표시하시오.
select 반정보, count(반정보) as 90점 초과 인원 from 성적 group by (반정보) having count(점수) > 90
반정보 | 90점 초과 인원 |
A반 | 1 |
A반 | 1 |
* where 절과 달리, having 절은 집계 함수(count, sum, avg, max, min..) 가 사용이 가능하다.
https://m.blog.naver.com/diceworld/220152819420
MSSQL GROUP BY 활용하기
- GROUP BY 절이란? 레코드 조회시 각 레코드를 하나의 그룹으로 묶어서 표현해주는 역활을 합니다....
blog.naver.com
'개인 공부 > 데이터베이스' 카테고리의 다른 글
[mssql] with 구문 (0) | 2022.10.04 |
---|---|
[mssql] SET NOCOUNT ON/OFF (0) | 2022.09.30 |
[mssql] 접두사 N (0) | 2022.09.29 |
[mssql] IN 연산자 (0) | 2022.09.29 |
[mssql] CAST 외 변환 (0) | 2022.09.29 |