현제의 현재이야기

[SQL] 터키어과 50주년 주문 정보 SQL문 짜기 본문

etc

[SQL] 터키어과 50주년 주문 정보 SQL문 짜기

현재의 현제 2023. 10. 18. 19:28

프리오더 기간이 다 끝난 이후에, 학생회에게 주문 정보를 엑셀로 줘야하는 소요가 생겼었다. 따라서 실제 쌓인 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