[sql] 그룹별로 요약하기

hanahana·2023년 1월 11일
1

group by

c1c2c3
a100200
a200200
b100200
c50010

이란 데이터가 있을때
a/b/c의 c2의 총 합을 알고싶다면 c1을 그룹으로 묶어야 한다.

이경우

select c1,sum(c2) 합계 from tbl group by c1

코드를 입력해준다면

c1합계
a300
b100
c500

으로 나타날것이다.

필터링하기 having

  • having은 일쪽의 group by의 where절이라고 할수있따(그룹바이인경우만 쓸수있다)

  • 위의 예시에서

c1합계
a300
b100
c500

100 초과인 결과만 나타내고싶다면

select c1,sum(c2) 합계 
from tbl 
group by c1
having 합계 > 100

이렇게 having을 추가해서 내가 정하거나 추가한 컬럼의 이름으로 조건을 지정해주면된다.

c1합계
a300
c500

이런 원하는 결과를 출력할수있다.

where과 having의 중복사용

c1c2c3
a100200
a200200
b100200
c50010

에서 c3의 값이 200이상인 행의 abc별로 100초과인 값만 합계를 구하고자 한다면

select c1,sum(c2) 합계 
from tbl 
where c3 = 200 //추가된 조건
group by c1
having 합계 > 100
c1합계
a300

이렇게
1. c3의 값이 200인 행
2. 합계가 100 초과인 행
이라는 2가지 조건을 모두 만족하는 결과를 출력하게된다.

정보 정렬 order by

select c1,sum(c2) 합계 from tbl group by c1
order by 합계 desc //정렬코드
c1합계
c500
a300
b100

이렇게 하면 합계가 많은 순으로 정렬된다, desc는 내림차순(많은것부터) asc는 오름차순이다(적은것부터).

본 내용은 데이터리안 'SQL 데이터 분석 캠프 입문반' 을 수강하며 작성한 내용입니다.

profile
hello world

0개의 댓글