SQL - Group by, Order by

murphytklee·2023년 4월 19일
0
post-thumbnail

[목표]

  1. 동일한 범주의 데이터를 묶어서 통계를 내주는 Group by를 이해한다.
  2. 출력하는 데이터를 필드의 값으로 정렬하여 출력하는 Order by를 익힌다.
  3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.

1. Group by 범주의 통계를 내주는

📌 Group by란?

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미한다.
Group by를 이용하면 1) 같은 성씨의 데이터를 하나로 묶고 2) 각 성씨의 회원수를 구할 수 있다.

  • ex) 성씨별 회원수를 Group by로 쉽게 구해보기
    ```sql
    select name, count(*) from users
    group by name;
    ```
    
    1. `select * from users` 
    2. `select * from users` 
    `group by name` 
    3. `select name, count(*) from users`
    `group by name` 

2. Group by 기능 알아보기

  • 동일한 범주의 개수: count(*)
    select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
    group by 범주별로 세어주고 싶은 필드명;

  • 동일한 범주에서의 최솟값: min()
    select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명
    group by 범주가 담긴 필드명;

  • 동일한 범주에서의 최댓값: max()
    select 범주가 담긴 필드명, max(최댓값을 알고 싶은 필드명) from 테이블명
    group by 범주가 담긴 필드명;

  • 동일한 범주의 평균 구하기: avg()
    • 소숫점 둘째자리 까지 정렬: round(avg(),2)

      select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블명
      group by 범주가 담긴 필드명;

  • 동일한 범주의 합계 구하기: sum()
    select 범주가 담긴 필드명, sum(합계를 알고 싶은 필드명) from 테이블명
    group by 범주가 담긴 필드명;

3. Order by 깔끔한 정렬이 필요할 때

📌 Order by는 특정열 기준으로 정렬할 때 사용하며 문자열(알파벳, 한글), 숫자, 시간 단위 모두 가능하다.
  • 오름정렬
    SELECT * from checkins
    order by likes
    • asc를 써주어도 된다.

  • 내림정렬: desc
    SELECT * from checkins
    order by likes DESC

  • SQL 쿼리가 실행되는 순서
    select name, count(*) from users
    group by name
    order by count(*);
    • ❕ 위 쿼리가 실행되는 순서: from → group by → select → order by

  • Where와 Group by, Order by 함께 사용해보기
    select payment_method, count(*) from orders
    where course_title = "웹개발 종합반"
    group by payment_method;

💡 쿼리 작성하는 팁

1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
5) 범주별로 통계를 보고싶은 필드를 찾기
6) SQL 쿼리 작성하기


4. 이외 유용한 문법, 별칭 기능 Alias

📌 쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있어 SQL은 Alias라는 별칭 기능을 지원한다.

  • 테이블명을 구체적으로 지시하는 별칭
    select * from orders o
    where o.course_title = '앱개발 종합반'
    • 주로 테이블 뒤에 o와 같은 한글자 알파벳을 갖다 붙인다.
    • o.course_title 이라고 하면 “oders 테이블에 있는 course_title을 얘기하는 거야”라는 뜻이다.

  • 출력되는 필드에 별칭
    select payment_method, count(*) as cnt from orders o
    where o.course_title = '앱개발 종합반'
    group by payment_method
    • 테이블명 뒤에 as 를 붙여 출력되는 필드에 별칭을 줄 수 있다.

5. 과제

✏️ 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기

SELECT payment_method , count(*) from orders
where course_title ='앱개발 종합반'
and email like '%naver.com'
group by payment_method
profile
murphytklee.tistory.com 이사갑니다. 옮겨지는 게시글은 비공개 처리합니다.

0개의 댓글

관련 채용 정보