# 그룹 필터링과 정렬
## 미션
---
HAVING, ORDER BY, LIMIT을 활용하여 [마켓컬리 DB](https://cloudstudying.kr/lectures/510) 관련 문제를푸시오.
#### DB 구조도

## 개념
---
#### 그룹화와 함께 자주 사용되는 구문들
우리는 앞서 GROUP BY로 데이터를 분류해보았다. 더 상세한 분류 및 분석을 위해 다음 3가지 구문을 익혀보자.

#### HAVING, 그룹 필터링하기
분류된 그룹 중, 특정 조건을 만족하는 것만 가져오려면 어떻게 해야 할까? HAVING 절을 사용하면 된다.

HAVING 절은 그룹 필터링을 수행한다. GROUP BY 절로 분류된 것들 중 원하는 그룹을 선별한다.
```
SELECT -- 6: 최종 결과 테이블에서 원하는 것만 조회!
...
FROM -- 1: 대상 테이블에
...
JOIN -- 2: 추가 테이블을 붙인 뒤,
...
WHERE -- 3: 원하는 조건으로 필터링!
...
GROUP BY -- 4: 이어서 그룹 별로 분류한 다음,
....
HAVING -- 5: 특정 조건으로 원하는 그룹을 선별!
...
;
```
#### ORDER BY, 정렬하기
정렬은 중요하다. 데이터가 정렬돼있어야 정보가 한눈에 들어오기 때문. 그렇다면 데이터 정렬은 어떻게 할까? ORDER BY 절을 사용하면 된다.

ORDER BY는 결과를 특정 기준으로 정렬한다. SELECT 절 이후에 수행되며, 오름차순은 ASC, 내림 차순은 DESC를 적는다.
```
SELECT -- 6: 최종 결과 테이블에서 원하는 것만 조회!
...
FROM -- 1: 대상 테이블에
...
JOIN -- 2: 추가 테이블을 붙인 뒤,
...
WHERE -- 3: 원하는 조건으로 필터링!
...
GROUP BY -- 4: 이어서 그룹 별로 분류한 다음,
....
HAVING -- 5: 특정 조건으로 원하는 그룹을 선별!
...
ORDER BY -- 7: 특정 컬럼을 기준으로 정렬(ASC: 오름차순, DESC: 내림차순)
some_column ASC
;
```
#### LIMIT, 조회 갯수 제한하기
정렬과 함께 자주 쓰이는 문법으로 LIMIT이 있다. 가져올 레코드 수를 제한하는 문법이다. 데이터를 한꺼번에 가져오기 어렵거나, 특정 일부분(BEST 3, WORST 5, ...)만 가져올 때 좋다.

LIMIT 절은 ORDER BY 이후에 수행된다.
```
SELECT -- 6: 최종 결과 테이블에서 원하는 것만 조회!
...
FROM -- 1: 대상 테이블에
...
JOIN -- 2: 추가 테이블을 붙인 뒤,
...
WHERE -- 3: 원하는 조건으로 필터링!
...
GROUP BY -- 4: 이어서 그룹 별로 분류한 다음,
....
HAVING -- 5: 특정 조건으로 원하는 그룹을 선별!
...
ORDER BY -- 7: 특정 컬럼을 기준으로 정렬(ASC: 오름차순, DESC: 내림차순)
some_column ASC
LIMIT -- 8: 가져올 데이터 수 지정(5개)
5
;
```
## 실습
---
#### 1. 결제(payments) 테이블에서 수단별 평균 결제 금액이 다음과 같을 때, 평균 결제금액이 36,000원 이상인 것만 조회하시오.

#### 2. 다음 쿼리는 상품명과 가격을 기준으로, 누적 판매정보를 조회한다. 이를 참고하여 주어진 문제를 푸시오.
```
-- 상품 이름과 가격을 기준으로, 누적 판매정보(판매량, 매출)를 조회
SELECT -- 4
products.name AS "상품명",
products.price AS "가격",
SUM(order_details.count) AS "누적 판매량",
SUM(products.price * order_details.count) AS "누적 매출"
FROM -- 1
products
LEFT JOIN order_details ON -- 2
order_details.product_id = products.id
GROUP BY -- 3
products.name,
products.price
;
```
(a) 누적 매출이 35,000원 이상인 상품을 조회하시오.

(b) 누적 매출이 2만원 이상이면서, 누적 판매량도 10개 이상인 상품을 조회하시오.

(c) 누적 매출이 없는 제품을, 가격을 기준으로 오름차순 정렬하여 조회하시오.

(d) 누적 매출 상위 5개 상품을 조회하시오.

## 훈련
---
#### 🔥 누적 판매량 상위 5개 상품을 조회하시오.

#### 🔥 가격 하위 5개 상품의 누적 매출을 조회하시오.

#### 🔥 장바구니에 담긴 것과 배송이 완료된 것을 구분하여, 모든 문제를 다시 푸시오.