반응형
HAVING
- 분류된 그룹들 중 "특정" 그룹만 가져오는 것
- WHERE 절은 일반 레코드를 필터링
- HAVING 절은 반드시 그룹화된 레코드만 필터링
-- 결제 테이블에서 수단별 평균 결제 금액이 다음과 같을때, 평균 결제금액이 36,000원 이상인 것만 조회
SELECT ptype, ROUND(AVG(amount)) AS "평균결제금액"
FROM payments
GROUP BY ptype
HAVING ROUND(AVG(amount)) >= 36000;
-- 상품명과 가격을 기준으로 누적 매출이 35,000원 이상인 상품을 조회하시오
SELECT
name AS 상품명,
price AS 가격,
SUM(order_details.count) AS 누적판매량,
SUM(products.price * order_details.count) AS 누적매출
FROM
products
LEFT JOIN order_details ON
order_details.product_id = products.id
GROUP BY
name, price
HAVING
SUM(products.price * order_details.count) >= 35000;
-- 누적 매출이 2만원 이상이면서, 누적 판매량도 10개 이상인 상품을 조회하시오
SELECT
NAME AS "상품명"
,PRICE AS "가격"
,SUM(ORDER_DETAILS.COUNT) AS "누적판매량"
,SUM(PRICE * ORDER_DETAILS.COUNT) AS "누적매출"
FROM
PRODUCTS
LEFT JOIN ORDER_DETAILS ON
ORDER_DETAILS.PRODUCT_ID = PRODUCTS.id
GROUP BY
NAME, PRICE
HAVING
SUM(PRICE * ORDER_DETAILS.COUNT) >= 20000
AND
SUM(ORDER_DETAILS.COUNT) >= 10;
ORDER BY
- 결과를 정렬하는 문법
- 오름차순 ASC
- 내림차순 DESC
-- 누적 매출이 없는 제품을, 가격을 기준으로 오름차순 정렬하여 조회하시오
SELECT
NAME AS "상품명"
,PRICE AS "가격"
,SUM(ORDER_DETAILS.COUNT) AS "누적판매량"
,SUM(PRICE * ORDER_DETAILS.COUNT) AS "누적매출"
FROM
PRODUCTS
LEFT JOIN
ORDER_DETAILS
ON
PRODUCTS.ID = ORDER_DETAILS.PRODUCT_ID
GROUP BY
NAME, PRICE
HAVING
-- 수식은 숫자만 비교할수 있음
-- NULL 값은 IS로 가져와야함
SUM(PRICE * ORDER_DETAILS.COUNT) IS NULL
ORDER BY PRICE;
LIMIT
- 가져온 레코드의 갯수를 제한하는 문
- 데이터가 너무 많아서 가져오기 어렵다거나, 혹은 일부 몇개만 가져오고 싶을때 사용
-- 누적매출 상위 5개 상품을 조회하시오
SELECT
NAME AS "상품명"
,PRICE AS "가격"
,SUM(ORDER_DETAILS.COUNT) AS "누적판매량"
,SUM(PRICE * ORDER_DETAILS.COUNT) AS "누적매출"
FROM
PRODUCTS
LEFT JOIN
ORDER_DETAILS
ON
PRODUCTS.ID = ORDER_DETAILS.PRODUCT_ID
GROUP BY
NAME, PRICE
HAVING
-- 누적매출이 Null이 아닌 데이터 가져오기
SUM(PRICE * ORDER_DETAILS.COUNT) IS NOT NULL
ORDER BY
"누적매출" DESC
LIMIT
5;
반응형
'DB > PostgreSQL' 카테고리의 다른 글
21. SubQuery | Select, Form, Join, Where 절 등 다양한 위치에 사용 (0) | 2022.12.10 |
---|---|
20. SQL 실행순서 (0) | 2022.12.10 |
18. GROYP BY | GROUP BY 와 COUNT | JOIN 후 GROUP BY (0) | 2022.11.07 |
16. OUTER JOIN( RIGHT JOIN 과 FULL JOIN ) (0) | 2022.10.31 |
15. OUTER JOIN( LEFT JOIN ) (0) | 2022.10.31 |