현제의 현재이야기
[SQL] 터키어과 50주년 주문 정보 SQL문 짜기 본문
프리오더 기간이 다 끝난 이후에, 학생회에게 주문 정보를 엑셀로 줘야하는 소요가 생겼었다. 따라서 실제 쌓인 DB 데이터를 가공하여서 원하는 테이블 형식으로 주기 위해서 직접 쿼리문을 짜는 소중한 경험을 하였다.
요청대로 학번_이름/상품이름/개수/사이즈 필드를 위한 쿼리문을 작성했다.
SELECT O.number_name, I.name, I.quantity, I.size
FROM tuaz_db.supply_order O
JOIN (
SELECT OI.order_id, I.name, OI.quantity, OI.size
FROM tuaz_db.supply_orderitems OI
JOIN tuaz_db.item_item I ON I.id = OI.item_id
) AS I ON O.id = I.order_id
WHERE O.status = 'completed'
ORDER BY O.number_name;
결과
두번째로는 주문 상품 별로 상품이름/사이즈/총개수/총금액 필드가 필요했다.
SELECT I.name,
SUM(CASE WHEN O.size = 's' THEN 1 ELSE 0 END) AS S,
SUM(CASE WHEN O.size = 'm' THEN 1 ELSE 0 END) AS M,
SUM(CASE WHEN O.size = 'l' THEN 1 ELSE 0 END) AS L,
SUM(CASE WHEN O.size = 'xl' THEN 1 ELSE 0 END) AS XL,
SUM(CASE WHEN O.size = '2xl' THEN 1 ELSE 0 END) AS "2XL",
SUM(O.quantity) AS "총 개수",
FORMAT(SUM(I.price), 0) AS "총 금액"
FROM tuaz_db.supply_orderitems O
JOIN tuaz_db.item_item I ON I.id = O.item_id
JOIN tuaz_db.supply_order o_order ON o_order.id = O.order_id
WHERE o_order.status = 'completed'
GROUP BY O.item_id
ORDER BY I.category DESC;
처음에 쿼리문을 짜고 한번 확인을 해보았었는데, 개수가 맞지 않아서 확인해보니 주문 상태가 'canceled' 인 상품들을 제외하지 않았었다. 그래서 단순하게 WHERE 절에서 'completed' 만 뽑아오게 추가했다.
결과
쿼리문을 직접 짤 일은 프로그래머스에서 SQL 공부할 때 짜는 것 밖에 없었는데, 이런 실제 데이터로 실제로 필요한 정보를 주기 위해서 쿼리문을 작성한 것은 처음이어서 값진 경험이었다.
'etc' 카테고리의 다른 글
[GoLang] 잊지 말아야 할 것들 (0) | 2023.08.21 |
---|---|
SQL 서브쿼리 연습 (0) | 2023.04.25 |
SQL 정리 (0) | 2023.04.23 |
AWS 1주차 (0) | 2023.01.12 |
EC2 배포 정리 (0) | 2023.01.08 |
Comments