Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 파이썬
- PostgreSQL
- insert_into
- query
- SubqueryFilter
- DBFilter
- PreparedStatement
- DATABASE
- Collections
- insertOne
- MongoDB
- Join
- sqlite3
- postgres
- PostgresDB
- onetoone
- python데이터베이스연동
- 자바스크립트
- 서브쿼리
- subquery
- statement
- 몽고디비
- javascript
- 데이터베이스
- cursor()
- MySQL
- sql
- 밴쿠버응급실
- DB
- python
Archives
- Today
- Total
새벽코딩
[PostgresDB-2] 17. 그룹필터링 (HAVING, ORDER BY, LIMIT) 본문
Programming/Postgres DB
[PostgresDB-2] 17. 그룹필터링 (HAVING, ORDER BY, LIMIT)
midnightcoder 2022. 12. 29. 04:20이전 포스팅에서 생성한 마켓컬리 데이터로 그룹 필터링에 관해서 실습
참고 : https://cloudstudying.kr/lectures/513
DB 데이터
DB 구조도
1. 결재(payments) 테이블에서 수단별 평균 결제 금액이 다음과 같을 때, 평균 결제 금액이 36,000원 이상인 것만 조회하시오
SELECT
ptype AS "결제 수단",
ROUND(AVG(amount), 2) AS "평균 결제금액"
FROM
payments
GROUP BY
ptype
여기에 HAVING 절을 추가해서 평균 결제금액이 36,000이상 인것을 필터링한다.
SELECT
ptype AS "결제 수단",
ROUND(AVG(amount), 2) AS "평균 결제금액"
FROM
payments
GROUP BY
ptype
HAVING -- 그룹 필터링 : 그룹화된 것들을 조건으로 선별!
AVG(amount) >= 36000
;
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원 이상인 상품을 조회하시오.
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
HAVING
SUM(products.price * order_details.count) >= 35000
;
(b) 누적 매출이 2만원 이상이면서, 누적 판매량도 10개 이상인 상품을 조회하시오.
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
HAVING
SUM(products.price * order_details.count) >= 20000
AND
SUM(order_details.count) >= 10
;
(c) 누적 매출이 없는 제품을, 가격을 기준으로 오름차순 정렬하여 조회하시오
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
HAVING
-- 누적 매출이 없다? NULL (단, NULL은 IS 로 확인해야됨)
SUM(products.price * order_details.count) IS NULL
ORDER BY
products.price
;
** 중요한 POINT 두가지
1. NULL 비교는 수식( = )을 사용하지 않고 IS 를 사용한다.
2. 정렬을 할때에는 ORDER BY 로 한다. (단, 오름차순은 뒤에 ASC 생략가능)
ORDER BY
products.price ASC
;
(d) 누적 매출 상위 5개 상품을 조회하시오
-- (d) 누적 매출 상위 5개 상품을 조회하시오
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
HAVING
SUM(products.price * order_details.count) IS NOT null
ORDER BY
"누적 매출" DESC
LIMIT
5
;
출처 : 홍팍의 'SQL 데이터 분석, 활용!'
'Programming > Postgres DB' 카테고리의 다른 글
[PostgresDB-2] 19. 서브쿼리실습 (SUBQUERY) (0) | 2022.12.29 |
---|---|
[PostgresDB-2] 18. 서브쿼리란?(Subquery) (0) | 2022.12.29 |
[PostgresDB-2] 16. 그룹화와 집계(with 마켓컬리 데이터) -GROUP BY (0) | 2022.12.28 |
[PostgresDB-2] 15. 테이블 조인 연습(마켓컬리 모델) (0) | 2022.12.22 |
[PostgresDB-2] 14. 테이블 조인 (RIGHT JOIN, FULL JOIN) (0) | 2022.12.21 |