[TIL] SQL - Group by, Order by

sooyoung choi·2023년 11월 10일

Javascript, Node.js

목록 보기
24/37
post-thumbnail

🕸️ Group by

​

  • 원하는 유형별로 데이터를 그룹화 해주고 싶을 때 사용한다.
    ​
  • 동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것.
    ​
  • ~별
    ​

🙋‍♀️ Group by가 실행되는 순서

​

from -> group by -> select

​

1) from orders: orders 테이블의 데이터 전체를 가져온다.
2) group by payment_method: 테이블 데이터에서 같은 payment_method를 갖는 데이터 합쳐준다.
3) select payment_method: payment_method 별로 그룹화 된 그룹들을 출력해준다.
​

  • 결제수단별로 그룹화 해서 보여줘.
    ​
select payment_method from orders
group by payment_method;

​
- 동일한 범주의 개수 구하기 count(*)
​

select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;

​

  • 결제수단별 주문의 총합을 보여줘.
    ​
select payment_method, count(*) from orders
group by payment_method;

​

​

  • 동일한 범주에서 최대 max(), 최소 min(), 평균 avg(), 총합 sum() 구하기
    ​
  • 주차별 좋아요의 최소, 최대, 평균값과 총합을 보여줘
    ​
# 최소
select week, min(likes) from checkins
group by week

​

# 최대
select week,max(likes) from checkins
group by week;

​

​

# 평균
select week, avg(likes) from checkins
group by week;
# 총합
select week, sum(likes) from checkins
group by week;

​

​

🧹 Order by

​

  • 깔끔함 정렬이 필요할 때 사용
    ​
  • 내림차순, 오름차순 등
    ​

🙋‍♀️ Order by가 실행되는 순서

​

from -> group by -> select -> order by****

​

1) from orders: orders 테이블의 데이터 전체를 가져온다.
2) group by payment_method: 테이블 데이터에서 같은 payment_method를 갖는 데이터 합쳐준다.
3) select payment_method: payment_method 별로 그룹화 된 그룹들을 출력해준다.
​
4) order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬해준다.
​

# 오름차순 정렬
select payment_method, count(*) from orders
group by payment_method
order by count(*)

​

​

  • 내림차순 정렬 desc
    ​
# 내림차순 정렬
select payment_method, count(*) from orders
group by payment_method
order by count(*) desc;

​

🕵️ Where 절과 함께 쓰기

​

  • '웹개발 종합반'의 '결제수단별 주문건수' 세어보기
    ​

🙋‍♀️ 실행되는 순서

​

from -> where -> group by -> select -> order by****

​

1) from orders: orders 테이블의 데이터 전체를 가져온다.
​
2) where course_title='웹개발 종합반': 웹개발 종합반 데이터만 남겨준다.
3) group by payment_method: 테이블 데이터에서 같은 payment_method를 갖는 데이터 합쳐준다.
4) select payment_method, count(*): payment_method 별로 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.
​
5) order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬해준다.
​

select payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method
order by count(*);

​

  • '네이버 이메일 사용 유저' 중 웹개발 종합반을 신청한 주문의 결제수단별 주문 건수의 값들을 내림차순으로 보여줘.
    ​
    1) from orders: orders 테이블의 데이터 전체를 가져온다.
    ​
    2) where email like '%naver.com' and course_title = '웹개발 종합반'
    ​
    : email에 'naver.com' 포함되는 데이터들 중 '웹개발 종합반' 데이터만 남겨준다.
    3) group by payment_method: 테이블 데이터에서 같은 payment_method를 갖는 데이터 합쳐준다.
    4) select payment_method, count(*): payment_method 별로 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.
    ​
    5) order by count(*) desc: 합쳐진 데이터의 개수에 따라 내림차순으로 정렬해준다.
    ​
select payment_method, count(*) from orders
where email like '%naver.com' and course_title = '웹개발 종합반'
group by payment_method
order by count(*) desc;

0개의 댓글