◆Order by
전에 group by로 같은 성씨의 데이터를 하나로 묶고, 각 성씨의 회원수를 구했었다.
select name, count(*) from users
group by name
이것을 정렬을 해보자. 무엇을 정렬하던 계산할 것은 하고, 자료를 추출 한 후 마지막에 이루어져야 한다.
그 말은? 마지막에 와야한다!
select name, count(*) from users
group by name
order by count(*)
기본적으로 작은 것부터 나온다. (즉, 오름차순으로 나온다)
큰 것부터 보고싶다면(즉, 내림차순으로 보고싶다면) 추가적인 descending의 약자인 desc라는 문구가 필요하다.
(참고로 오름차순은 asc, ascending의 약자인데 써주지 않아도 된다)
select name, count(*) from users
group by name
order by count(*) desc
Order by는 모든 SQL 쿼리에 적용될 수 잇는 기능이다.
checkins 테이블에서 like수를 내림차순으로 보고싶다면?
select * from checkins
order by likes desc
SQL 쿼리가 실행되는 순서를 한 번 더 짚고 넘어가자!
에러가 안 나는 쿼리를 작성하기 위해서는 SQL 쿼리가 실행되는 순서를 아는 것이 중요하다.
select name, count(*) from users group by name order by count(*)
위 쿼리가 실행되는 순서는 from → group by → select → order by
1. from users : users 테이블 데이터 전체를 가져오고
2. group by name : users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐준다
3. select name, count(*) : name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 센 후
ex) 이**는 2개, 김**은 2개, 박**은 1개
4. order by count(*) : 합쳐진 데이터의 개수에 따라 오름차순으로 정렬
여기서 where절을 함께 사용하는 것을 응용을 해보자.
원리는 where절로 조건이 하나 추가되고, 그 이후 group by, order by가 실행되는 것 인데....
- 웹개발 종합반의 결제수단별 주문건수 세어보기
1. orders 테이블에서 주문 데이터를 읽어오고
2. 웹개발 종합반 ㄷ데이터만 남기고
3. 결제수단(범주) 별로 그룹화 한뒤
4. 결제수단별 주문건수를 세어준다
select payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method
이후 count(*)을 사용해 오름차순으로 나오게는?
select payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method
order by count(*)
여기서의 쿼리가 실행되는 순서는 from → where → group by → select → order by
'SQL' 카테고리의 다른 글
Order by 문자열은 정렬이 되는가? (0) | 2022.05.11 |
---|---|
group by 사용할 때 자주 하는 실수 (0) | 2022.05.05 |
group by 사용해보기 (0) | 2022.05.05 |
group by, order by 가 뭔데? (통계 관련 최대 / 최소 / 평균 / 개수) (0) | 2022.05.05 |
Select, Where 실전 퀴즈 풀어보며 익히기 (0) | 2022.05.05 |