MySQL 정렬&그룹화하기 (GROUP & ORDER)
Date Created : 2023, Aug 17
Date Modified : 2023, Aug 30
Date Modified : 2023, Aug 30
1. GROUP BY
여러개의 컬럼을 특정 데이터를 기준삼아 같은것 끼리 묶어줄 수 있다. 여러조건으로 그룹 시 가능한 모든 조합으로 그룹화한다.
GROUP BY 컬럼명 ON 조건1 , 조건 2…
다음과 같이 학생DB의가 STUDENTS_DB
라는 테이블로 저장되어 있다고 하자.
GRADE | NAME | MAJOR |
---|---|---|
3 | 홍*동 | 문과 |
2 | 김*수 | 문과 |
3 | 박*우 | 이과 |
2 | 이*현 | 이과 |
3 | 장*우 | 문과 |
… | … | … |
2 | 배*수 | 이과 |
다음과 같이 GRADE, MAJOR로 그룹화하여 각 문/이과별 학년별 학생수를 카운트 할 수 있다.
SELECT MAJOR,NAME,COUNT(*)
FROM STUDENTS_DB
GROUP BY GRADE, NAME
해당 내용은 다음 결과를 도출한다.
MAJOR | GRADE | COUNT |
---|---|---|
문과 | 1 | 246 |
문과 | 2 | 310 |
문과 | 3 | 299 |
이과 | 1 | 142 |
이과 | 2 | 133 |
이과 | 3 | 157 |
문/이과 * 학년(1/2/3)으로 이루어진 총 6컬럼의 테이블을 확인할 수 있다.
2. ORDER BY
SQL쿼리로 도출된 결과를 조건에 따라 정렬할 수 있다.
여러번 정렬 시 ,
로 각 조건을 연결하고, 뒤에서 부터 순차적으로 정렬된다.
(앞의 조건으로 정렬하되, 같은조건일 때 뒤의 조건으로 정렬)
ORDER BY 컬럼명 ON 조건1 [ASC or DESC] , 조건2…
조건 적용방향
오름차순(ASC)은 생략가능, DESC를 추가해 내림차순으로 정렬가능
다음과 같은 상품 테이블 GOODS_DB
이 있다고 하자.
NAME | PRICE | COUNT |
---|---|---|
PEN | 500 | 150 |
ERASER | 300 | 30 |
RULER | 700 | 20 |
MAGNET | 700 | 30 |
PAPER | 200 | 150 |
GLUE | 500 | 100 |
SELECT *
FROM GOODS_DB GD
ORDER BY GD.COUNT DESC, GD.PRICE
해당 쿼리문을 작성하면, 아래의 결과를 도출한다.
NAME | PRICE | COUNT |
---|---|---|
PAPER | 200 | 150 |
ERASER | 300 | 30 |
PEN | 500 | 150 |
GLUE | 500 | 100 |
MAGNET | 700 | 30 |
RULER | 700 | 20 |
가장 좌측의 조건인 COUNT기준으로 내림차순 정렬하지만,
같은조건일때는 먼저 정렬했던, PRICE기준으로 정렬(오름차순)된다.
3. 연관문서
연관문서