걷기 시작한 Coding Novice

SQL

order by 사용해보기

Spell 2022. 5. 5. 03:25

◆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