[TIL] 2023.04.28 MySQL_GROUP BY, ORDER BY

MySQL

MySQL GROUP BY

SELECT name, count(*) 
  FROM users
GROUP BY name;
  • GROUP BY동일한 범주의 데이터를 하나로 묶어서 범주별 통계를 내주는 것
  • 예를 들면 Group by를 이용해서 1) 같은 성씨의 데이터를 하나로 묶고 2) 각 성씨의 회원수를 구할 수 있다.

위 쿼리가 실행되는 순서: from → group by → select

  1. from users: users 테이블 데이터 전체를 가져온다.
  2. group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합친다.
  3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.

상단 코드의 결과물

 

-- 주차별 좋아요 최솟값 구하기
-- MIN(최솟값을 알고 싶은 필드명)
SELECT week, MIN(likes) 
  FROM checkins
GROUP BY week;
  • MIN으로 동일한 범주에서의 최솟값 구하기

 

-- 주차별 좋아요 최댓값 구하기
-- MAX(최댓값을 알고 싶은 필드명)
SELECT week, MAX(likes) 
  FROM checkins
GROUP BY week;
  • MAX로 동일한 범주에서의 최댓값 구하기

 

-- 주차별 좋아요 평균값 구하기
-- AVG(평균값을 알고 싶은 필드명)
SELECT week, AVG(likes) 
  FROM checkins
GROUP BY week;
  • AVG로 동일한 범주의 평균 구하기
  • 평균을 반올림하고 싶을 때는 ROUND 사용
    • ROUND(AVG(likes), 2) -> 소수점 아래 두 자리까지 반올림

 

-- 주차별 좋아요 합계 구하기
-- SUM(합계를 알고 싶은 필드명)
SELECT week, SUM(likes) 
  FROM checkins
GROUP BY week;
  • SUM으로 동일한 범주의 합계 구하기

 

MySQL ORDER BY

SELECT *
  FROM Customers
ORDER BY City DESC;
  • 데이터를 오름차순 또는 내림차순으로 정렬하는 데 사용함
  • ASC는 디폴트 값이므로 생략 가능, 내림차순 정렬을 원할 때는 DESC를 작성해야 함

 

SELECT name, COUNT(*)
  FROM users
  GROUP BY name 
  ORDER BY COUNT(*) DESC 
  ;

위 쿼리가 실행되는 순서: from → group by → select → order by

  1. from users: users 테이블 데이터 전체를 가져온다.
  2. group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합친다.
  3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.
  4. order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬한다.

 

SELECT payment_method, COUNT(*)
  FROM orders
 WHERE course_title = '웹개발 종합반'
GROUP BY payment_method 
ORDER BY COUNT(*);

위 쿼리가 실행되는 순서: from → where → group by → select → order by

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

 

MySQL Aliases

SELECT payment_method, count(*) as cnt 
  FROM orders o
 WHERE o.course_title = '앱개발 종합반'
GROUP BY payment_method;
  • 테이블에 별칭을 설정할 수 있음