모든 자료 출처 : 스파르타 코딩 클럽
01. 동일한 범주의 데이터를 묶어주는 Group by
성씨별 회원수를 Group by로 쉽게 구해보기
select name, count(*) from users
group by name;
- 위 쿼리가 실행되는 순서 : from → group by → select
- from users: users 테이블 데이터 전체를 가져오기
- group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐주기
- select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어주기
- 예) 이**, 이**, 김**, 김**, 박** 이렇게 데이터가 있었다면, 이는 2개, 김은 2개, 박**은 1개

예제 1) group by를 사용해서 '신'씨를 가진 데이터가 몇 개인지 살펴보기
1. users 테이블 전체 불러오기
select * from users;
2. users 테이블에서 '신' 씨를 가진 데이터만 불러와서 개수 살펴보기
select * from users
where name = "신**";
3. group by를 사용해서 '신'씨를 가진 데이터가 몇 개인지 살펴보기
select name, count(*) from users
group by name;
예제 2) 주차별 '오늘의 다짐' 개수 구하기
select week, count(*) from checkins
group by week;
select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;
* week가 범주별로 세어주고 싶은 필드명
예제 3) 주차별 '오늘의 다짐'의 좋아요 최솟값 구하기
select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;
select week, min(likes) from checkins
group by week;
* 범주가 담긴 필드명은 week, 최솟값을 알고 싶은 필드명은 likes
예제 4) 주차별 '오늘의 다짐'의 좋아요 최댓값 구하기
select 범주가 담긴 필드명, max(최댓값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;
select week, max(likes) from checkins
group by week;
* 범주가 담긴 필드명은 week, 최대값을 알고 싶은 필드명은 likes
예제 5) 주차별 '오늘의 다짐'의 좋아요 평균값 구하기
select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;
select week, avg(likes) from checkins
group by week;
* 범주가 담긴 필드명은 week, 평균값을 알고 싶은 필드명은 likes
(참고) avg만 쓰면 소수점이 조금 많이 나오는게 보기 않좋을 수 있어서 round라는 것을 사용하기도 함

예제 6) 주차별 '오늘의 다짐'의 좋아요 합계 구하기
select 범주가 담긴 필드명, sum(합계를 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;
select week, sum(likes) from checkins
group by week;
* 범주가 담긴 필드명은 week, 합계를 알고 싶은 필드명은 likes
02. 깔끔하게 데이터를 정렬해주는 Order by
like를 많이 받은 순서대로 '오늘의 다짐'을 Order by로 출력해보기
select * from checkins
order by likes desc;
* 적게 받은 순서대로는 보기 위해서는, 맨 끝의 desc를 제거해 주기
select name, count(*) from users
group by name
order by count(*);
- 위 쿼리가 실행되는 순서: from → group by → select → order by
- from users: users 테이블 데이터 전체를 가져오기
- group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐주기
- select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어주기
- 예) 이**, 이**, 김**, 김**, 박** 이렇게 데이터가 있었다면, 이는 2개, 김은 2개, 박**은 1개
- order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬해주기
03. Where와 Group by, Order by 함께 사용하기
웹개발 종합반의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
where course_title = "웹개발 종합반"
group by payment_method;
- 위 쿼리가 실행되는 순서: from → where → group by → select
1. orders 테이블에서 주문 데이터를 읽어오고
2. 웹개발 종합반 데이터만 남기고
3. 결제수단(범주) 별로 그룹화하고
4. 결제수단별 주문건수를 세어주기
* group by와 select 사이에 where로 조건을 넣어주면 끝!
- from orders: users 테이블 데이터 전체를 가져오기
- where course_title = "웹개발 종합반": 웹개발 종합반 데이터만 남겨주기
- group by payment_method: 같은 payment_method을 갖는 데이터를 합쳐주기
- select payment_method, count(*): payment_method에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어주기
- 예) CARD, CARD, kakaopay 이렇게 데이터가 있었다면, CARD는 2개, kakaopay는 1개
* 만약 order by가 추가된다면? order by는 맨 나중에 실행! (결과물을 정렬해주는 것이기 때문!)
'SQL 입문 공부' 카테고리의 다른 글
| 별칭 기능 Alias 알아보기 (0) | 2023.01.21 |
|---|---|
| Group by와 Order by 사용하기 2 (0) | 2023.01.21 |
| select, where절 (0) | 2023.01.01 |
댓글