6일차

|
/* 0731 실습1 */
-- 1.고객별로 주문한 제품의 수와 주문한 제품 중 //  최고항목가격(판매가격)을 추출하시오
-- 결과: 고객번호, 고객이름, 주문제품 수, 주문제품 중 최고항목가격
SELECT C.cust_id, C.cust_name,
    (SELECT SUM(OI.quantity)
    FROM Orderitems OI, Orders O
    WHERE OI.order_num = O.order_num
    AND O.cust_id = C.cust_id
    ) order_quantity,
        (SELECT MAX(item_price)
        FROM Orderitems OII, Orders OO
        WHERE OII.order_num = OO.order_num
        AND OO.cust_id = C.cust_id
        GROUP BY OO.cust_id
        ) max_price
FROM CUSTOMERS C
GROUP BY C.cust_id, C.cust_name;

-- 집합개념으로 풀이
SELECT m.cust_id, m.cust_name, n.quantity, n.max_price
FROM   customers m,
       (SELECT b.cust_id, SUM(a.quantity) quantity, MAX(a.item_price) max_price
        FROM   orderitems a, orders b
        WHERE  a.order_num = b.order_num
        GROUP BY b.cust_id
       ) n
WHERE  m.cust_id = n.cust_id    
;

-- 2.주문된 제품 중에 // 제품의 공급업체가 있는 도시가 ‘Dollsville’이고 // 주문된 총 제품의 수가 300을 넘는 제품명을 추출하시오
SELECT TRIM(prod_name)
FROM Products P
WHERE vend_id IN(
    SELECT vend_id
    FROM Vendors
    WHERE vend_city = 'Dollsville' 
    GROUP BY vend_id
    )
AND EXISTS(
    SELECT *
    FROM Orderitems
    WHERE prod_id = P.prod_id
    HAVING SUM(quantity) >=300
    )
;

-- 집합개념으로 풀이
SELECT m.prod_name
FROM   products m, vendors n
WHERE  m.vend_id = n.vend_id
AND    prod_id IN (
         SELECT prod_id
         FROM   orderitems a
         WHERE  prod_id = m.prod_id
         GROUP BY prod_id
         HAVING SUM(quantity) > 300
       )
AND    n.vend_city = 'Dollsville'        
;

-- 3.고객별로 주문한 상품 중에 //  가장 비싼 제품명을 추출하시오
-- 결과: 고객번호, 고객이름, 제품번호, 제품이름, 항목가격(판매가격)

-- 수정완료
SELECT C.cust_id, TRIM(C.cust_name), TRIM(P.prod_id), TRIM(P.prod_name), OI.item_price
FROM Customers C, Products P, Orders O, Orderitems OI
WHERE P.prod_id = OI.prod_id
AND OI.order_num = O.order_num
AND O.cust_id = C.cust_id
AND OI.item_price IN(
            (SELECT MAX(item_price)
            FROM Orderitems OII, Orders OO
            WHERE OII.order_num = OO.order_num
            AND OO.cust_id = C.cust_id
            GROUP BY C.cust_id
            )
    )
;

-- 집합개념으로 풀이
SELECT m.cust_id, m.cust_name, o.prod_id, o.prod_name, l.item_price
FROM   customers m, orders n, orderitems l, products o,
       (SELECT b.cust_id, MAX(a.item_price) max_price
        FROM   orderitems a, orders b
        WHERE  a.order_num = b.order_num
        GROUP BY b.cust_id
       ) t
WHERE  m.cust_id = n.cust_id
AND    n.order_num = l.order_num
AND    l.prod_id = o.prod_id
AND    m.cust_id = t.cust_id
AND    l.item_price = t.max_price
;


'Bitcamp > BITCAMP - SQL' 카테고리의 다른 글

8일차  (0) 2019.08.12
7일차  (0) 2019.08.02
5일차  (0) 2019.07.30
4일차  (0) 2019.07.29
3일차  (0) 2019.07.26
And