MySQL
MySQL GROUP BY
SELECT name, count(*)
FROM users
GROUP BY name;
- GROUP BY로 동일한 범주의 데이터를 하나로 묶어서 범주별 통계를 내주는 것
- 예를 들면 Group by를 이용해서 1) 같은 성씨의 데이터를 하나로 묶고 2) 각 성씨의 회원수를 구할 수 있다.
위 쿼리가 실행되는 순서: from → group by → select
- from users: users 테이블 데이터 전체를 가져온다.
- group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합친다.
- 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
- from users: users 테이블 데이터 전체를 가져온다.
- group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합친다.
- select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.
- 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
- from orders: users 테이블 데이터 전체를 가져온다.
- where course_title = "웹개발 종합반": 웹개발 종합반 데이터만 남긴다.
- group by payment_method: 같은 payment_method을 갖는 데이터를 합친다.
- select payment_method, count(*): payment_method에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어준다.
- order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬한다.
MySQL Aliases
SELECT payment_method, count(*) as cnt
FROM orders o
WHERE o.course_title = '앱개발 종합반'
GROUP BY payment_method;
- 테이블에 별칭을 설정할 수 있음