[마지막 연습 문제]
다음과 같은 상품(products) 테이블과 주문(orders) 테이블이 있습니다.
- 이번 문제에서는 MYSQL에서 실제 TABLE을 만들어서 진행하였다.
44. 모든 주문의 주문 ID와 주문된 상품의 이름을 나열하는 쿼리를 작성해주세요!
SELECT od.id, pd.name
FROM orders od, products pd
WHERE od.product_id = pd.id
- 결과는 아래와 같다.
45. 총 매출(price * quantity의 합)이 가장 높은 상품의 ID와 해당 상품의 총 매출을 가져오는 쿼리를 작성해주세요!
- GROUP BY 없이 집계함수와 비집계함수를 함께 사용되는 것이 허용되지 않을 수 있다.
- 생각해보니, 둘이 그냥 곱하고, 그걸 ORDERBY 한후, LIMIT를 주면 되었다.
> 근데 다른 경우를 대비하여 집계함수가 계산할 기준으로 그룹화 해주는 것이 좋을 거 같다.
> 그리하여 각 상품별로 총 매출을 계산하려면 product_id와 product_name으로 그룹화하는것이 나을 것이다.
SELECT SUM(pd.price*od.quantity) as total, pd.name
FROM products pd
join orders od on od.product_id = pd.id
GROUP BY pd.name, od.product_id
ORDER BY total DESC
LIMIT 1
46. 각 상품 ID별로 판매된 총 수량(quantity)을 계산하는 쿼리를 작성해주세요!
SELECT pd.name,SUM(od.quantity)
FROM products pd
JOIN orders od ON pd.id=od.product_id
GROUP BY od.product_id, pd.name
47. 2023년 3월 3일 이후에 주문된 모든 상품의 이름을 나열하는 쿼리를 작성해주세요!
SELECT pd.name, od.order_date
FROM orders od
JOIN products pd ON pd.id=od.product_id
WHERE od.order_date >= '2023-03-03'
48. 가장 많이 판매된 상품의 이름을 찾는 쿼리를 작성해주세요!
- 가장 많이 판매된 상품이라고 했기 때문에 수량이 많은걸 택하겠다.
SELECT pd.name, SUM(od.quantity) as total
FROM products pd
JOIN orders od ON od.product_id = pd.id
GROUP BY od.product_id,pd.name
ORDER BY total DESC
LIMIT 1
** 여기부터는 다른 데이터도 추가해 보았다. 예외로 처리될 경우를 대비해서 데이터를 조금 더 추가하였다.
INSERT INTO orders (id, product_id, quantity, order_date) VALUES
(104, 1, 4, '2023-04-01'),
(105, 2, 3, '2023-04-02'),
(106, 3, 2, '2023-04-04');
INSERT INTO products (id,name,price) VALUES (4,'테스트',500);
49. 각 상품 ID별로 평균 주문 수량을 계산하는 쿼리를 작성해주세요!
SELECT pd.name, AVG(od.quantity)
FROM orders od
JOIN products pd ON pd.id=od.product_id
GROUP BY od.product_id, pd.name
50. 판매되지 않은 상품의 ID와 이름을 찾는 쿼리를 작성해주세요!
SELECT id, name
FROM products
WHERE id NOT IN (SELECT product_id FROM orders);
SQL 걷기반 완료 : > ! 금,토,일,월,화 5일정도 걸렸다.
SQL을 배운지 꽤 돼서 그런가 시간이 걸렸던 거 같다 ㅠㅡㅠ..
얼른 걷기반 자바 완료 후 SQLD 수업과 WEB수업을 들을 예정이다 !
'백엔드 부트캠프[사전캠프] > 문제풀이' 카테고리의 다른 글
[내일배움캠프-사전캠프 문제풀이] JAVA 응용문제 1, 2 (1) | 2025.01.22 |
---|---|
[내일배움캠프-사전캠프] JAVA 걷기반 (1) | 2025.01.21 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.21 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.20 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.19 |