c1 | c2 | c3 |
---|---|---|
a | 100 | 200 |
a | 200 | 200 |
b | 100 | 200 |
c | 500 | 10 |
이란 데이터가 있을때
a/b/c의 c2의 총 합을 알고싶다면 c1을 그룹으로 묶어야 한다.
이경우
select c1,sum(c2) 합계 from tbl group by c1
코드를 입력해준다면
c1 | 합계 |
---|---|
a | 300 |
b | 100 |
c | 500 |
으로 나타날것이다.
having은 일쪽의 group by의 where절이라고 할수있따(그룹바이인경우만 쓸수있다)
위의 예시에서
c1 | 합계 |
---|---|
a | 300 |
b | 100 |
c | 500 |
100 초과인 결과만 나타내고싶다면
select c1,sum(c2) 합계
from tbl
group by c1
having 합계 > 100
이렇게 having을 추가해서 내가 정하거나 추가한 컬럼의 이름으로 조건을 지정해주면된다.
c1 | 합계 |
---|---|
a | 300 |
c | 500 |
이런 원하는 결과를 출력할수있다.
c1 | c2 | c3 |
---|---|---|
a | 100 | 200 |
a | 200 | 200 |
b | 100 | 200 |
c | 500 | 10 |
에서 c3의 값이 200이상인 행의 abc별로 100초과인 값만 합계를 구하고자 한다면
select c1,sum(c2) 합계
from tbl
where c3 = 200 //추가된 조건
group by c1
having 합계 > 100
c1 | 합계 |
---|---|
a | 300 |
이렇게
1. c3의 값이 200인 행
2. 합계가 100 초과인 행
이라는 2가지 조건을 모두 만족하는 결과를 출력하게된다.
select c1,sum(c2) 합계 from tbl group by c1
order by 합계 desc //정렬코드
c1 | 합계 |
---|---|
c | 500 |
a | 300 |
b | 100 |
이렇게 하면 합계가 많은 순으로 정렬된다, desc는 내림차순(많은것부터) asc는 오름차순이다(적은것부터).
본 내용은 데이터리안 'SQL 데이터 분석 캠프 입문반' 을 수강하며 작성한 내용입니다.