범주의 통계를 내주는 group by
성씨별로 몇 명의 회원이 있는지 알아보자.
성씨별로 몇 명이 회원이 있는지 구하려고 where 절을 사용해서 수십개의 쿼리를 작성하는 것은 너무 비효율적이다.
이 문제를 group by를 사용해서 바로 해결이 가능하다.
select name, count(*) from users
group by name
![]() |
성씨별로 카운터가 되어지며 맨 아래 숫자를 확인하면 54개의 성씨가 있다는 정보도 알 수 있다.
여기서 SQL 쿼리가 실행되는 순서
위 쿼리가 실행되는 순서는 from → group by → selectselect name, count(*) from users group by name
1. from users : users 테이블 데이터 전체를 가져온다
2. group by name : users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐준다
3. select name, count(*) : name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 모두 세어준다.
ex) [이**, 이**, 김**, 김**, 박**] 이렇게 데이터가 있었다면, 이**는 2개, 김**은 2개, 박**은 1개가 된다.
신씨로 실습을 다시 해보았다.
select * from users
where name = '신**'
![]() |
where을 사용해서 가장 아랫줄을 보면 14개의 데이터가 있다는 걸 알 수 있다.
select name, count(*) from users
group by name
![]() |
group by를 사용하여 결과 값을 확인해보니 신씨에 대한 값은 같았다.
추가로 다른 성씨들도 여러 번 작업할 필요 없이 한 번에 group by로 확인할 수 있었다.
◆Group by
동일한 범주의 개수 구하기 (가장 많이 쓴다고 한다)
동일한 범주의 개수는 count(*)를 함께 이용해야 한다.
- 주차별 '오늘의 다짐' 개수 구하기.
select week, count(*) from checkins
group by week
![]() |
where절로 검증해보자.
select * from checkins
where week = 1
![]() |
위 그림처럼 맨 아래로 내려보니 1주차가 총 96개로 동일하다는 걸 알 수 있었다.
동일한 범주에서의 최소값 구하기 min(필드명)
동일한 범주 특정 필드의 최솟값은 min(필드명)을 사용한다. (꼭 필드명이 필요하다)
- 주차별 '오늘의 다짐'의 좋아요 최솟값 구하기
select week, min(likes) from checkins
group by week
![]() |
결과를 보면 1주차에는 like가 0개가 최소, 2주차도 동일하며, 3주차에는 like 1개가 최소라는 걸 알 수 있다.
동일한 범주에서의 최댓값 구하기 max(필드명)
동일한 범주 특정 필드의 최댓값은 max(필드명)을 사용한다. (꼭 필드명이 필요하다)
- 주차별 '오늘의 다짐'의 좋아요 최댓값 구하기
select week, max(likes) from checkins
group by week
![]() |
최소값을 구했을 때와 동일하게 접근하여, 1주차에 4개, 2주차에 5개, 3주차에 3개의 like를 받은게 최대값이라는 걸 알 수 있다.
동일한 범주의 평균 구하기
동일한 범주 특정 필드의 평균값은 avg(필드명)을 사용한다. 참고로 Average의 약자이다.
- 주차별 '오늘의 다짐'의 좋아요 평균값 구하기
select week, avg(likes) from checkins
group by week
![]() |
평균값이라 소수점으로 나오게 된다.
소수점 몇번 째 자리까지 나오게 할 것인지도 설정할 수 있다.
select week, round(avg(likes), 2) from checkins
group by week
![]() |
round로 묶어 준 뒤 쉼표 이후 몇 번째 자리까지 표시할 지 적어주면 된다.
참고로 0을 적게되면 반올림을 하게 된다.
select week, round(avg(likes), 0) from checkins
group by week
![]() |
동일한 범주의 합계 구하기
동일한 범주 특정 필드의 합계는 sum(필드명)을 사용한다. (엑셀 함수와 비슷하다?)
- 주차별 '오늘의 다짐'의 좋아요 합계 구하기
select week, sum(likes) from checkins
group by week
![]() |
여기서 맞는지 where 문으로 3주차 데이터를 검증을 해보자.
select * from checkins
where week = 3
![]() |
3주차 2+2+3+2+1+1+2+1+1=15
'SQL' 카테고리의 다른 글
group by 사용할 때 자주 하는 실수 (0) | 2022.05.05 |
---|---|
order by 사용해보기 (0) | 2022.05.05 |
group by, order by 가 뭔데? (통계 관련 최대 / 최소 / 평균 / 개수) (0) | 2022.05.05 |
Select, Where 실전 퀴즈 풀어보며 익히기 (0) | 2022.05.05 |
Where 절과 자주 같이 쓰는 문법 써보기 (0) | 2022.05.03 |