Group by → 동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것
// ex) 성씨별 회원수를 구해보자.
select name, count(*) from users
group by name
// 이때, SQL 쿼리가 실행되는 순서는?
1) select * from users // users 테이블 데이터를 가져온다
2) select * from users
group by name // users 테이블에서 같은 name을 갖는 데이터를 합쳐준다
3) select name, count(*) from users
group by name // name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐졌는지 세어준다
★순서를 생각하며 작성한다★
기능
- 범주의 개수 : count(*)
select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;
- 범주 최솟값 : min()
select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;
- 범주 최대값 : max()
select 범주가 담긴 필드명, max(최댓값을 알고 싶은 필드명) from 테이블명 group by 범주가 담긴 필드명;
- 범주 평균 : avg()
select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;
→ 평균값에서 소수점 반올림 : round(avg(평균값을 알고 싶은 필드명),숫자)
- 범주 합계 : sum()
select 범주가 담긴 필드명, sum(합계를 알고 싶은 필드명) from 테이블명 group by 범주가 담긴 필드명;
Order by → 결과를 정렬할 때
위와 같은 결과창을 정렬할 떄
select name/*필드명 안 적어도 실행은 가능 결과창에 count만 보임*/, count(*) from users
group by name
order by count(*); // 기본 (오름차순 : asc) 으로 정렬됨, (내림차순 : desc)
// order by의 실행 순서는?
select name, count(*) from users
group by name
order by count(*);
1) select * from users // users 테이블 데이터 전체를 가져온다
2) select name, count(*) from users
group by name // name에 따라 합쳐진 데이터가 몇 개 인지 세어준다
3) select name, count(*) from users
group by name
order by count(*) // 합쳐진 데이터의 개수를 오름차순으로 정렬한다
쿼리 작성 꿀팁🍯
1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
5) 범주별로 통계를 보고싶은 필드를 찾기 6) SQL 쿼리 작성하기!
'SQL' 카테고리의 다른 글
[SQL] Homework 2 (0) | 2022.02.24 |
---|---|
[SQL] Quiz 2 (0) | 2022.02.24 |
[SQL] homework (0) | 2022.02.23 |
[SQL] Quiz (0) | 2022.02.23 |
[SQL] 1주차 : Selcet 쿼리문 / Where절 (0) | 2022.02.23 |