그동안 배운 것을 토대로 sql 문제를 풀어보고자 한다.
1. 공판장품목별입출고현황 데이터를 전체 조회하세요
select * from 공판장품목별입출고현황

2. 공판장품목별재고현황 데이터 중 기준일자가 "2023.9.12"인 데이터를 조회하세요 (재고량이 높은 순서대로)
select * from 공판장품목별재고현황 where stock_date = "2023.9.12" order by inventory_quantity desc;

3. 공판장품목별입출고현황 데이터 중 상태가공분류가 냉동이고 기준일자가 “2023.9.1”이며 입,출고량이 0인 데이터는 제외하고 조회하세요.
select * from 공판장품목별입출고현황
where 1=1
and product_category_name = '(냉동)'
and stock_date = '2023.9.1'
and stock_quantity_kg <>0
and shipment_quantity_kg <>0;

4. 공판장품목별재고현황 테이블에서 냉동이거나 냉장인 수산물품목의 전체 입고량 무게가 2번째로 높은 물류센터는 어디인지 확인하세요.
SELECT warehouse_code, warehouse_name,
SUM(inventory_quantity_kg)
as sum_inventory_quantity_kg
FROM 공판장품목별재고현황
WHERE product_category_name IN ("(냉동)", "(냉장)")
GROUP BY warehouse_code, warehouse_name
-- inventory_quantity_kg
ORDER BY sum_inventory_quantity_kg DESC
LIMIT 1 OFFSET 1;

5. 공판장품목별재고현황에서 공판장 코드가 “108100”인 수산물 품목 중에서 누적 재고량이 가장 많은 수산물 품목과 날짜를 확인하세요.
5. select warehouse_code, warehouse_name, stock_date, product_code, product_name, sum(inventory_quantity) from 공판장품목별재고현황
where warehouse_code = '108100'group by product_code, warehouse_name, stock_date, product_code, product_name
order by sum(inventory_quantity) desc
limit 1

6.공판장품목별입출고현황 테이블과 공판장품목별재고현황 테이블을 이용해 기준 일자가 2023.9.2. 인 공판장품목별 수산물품목에 대한 입,출고량과 재고량을 모두 구하세요.
SELECT
t.warehouse_code,
t.warehouse_name,
t.product_code,
t.product_name ,
i.inventory_quantity,
t.stock_quantity,
t.shipment_quantity
FROM
공판장품목별입출고현황 t
LEFT JOIN
공판장품목별재고현황 i
ON
t.warehouse_code = i.warehouse_code
AND t.product_code = i.product_code
WHERE t.stock_date = "2023.9.2"
AND i.stock_date = "2023.9.2";

7. 공판장품목별입출고현황 테이블에서 공판장 별 상태가공분류코드가 몇 개 존재하는지 확인하세요.
# column : 공판장코드, 공판장명, 상태가공분류 개수
select warehouse_code, warehouse_name, count(distinct product_category) as '상태가공분류개수'
from 공판장품목별입출고현황
group by warehouse_code, warehouse_name

distinct는 중복을 제거하는 것이다.
8. 모든 물류센터에 대해서 보관 방법이 냉동이고 누적 입고량이 1000 이상인 상품에 대한 정보를 나타내는 테이블을 생성하세요. column : 공판장코드, 공판장명, 품목코드, 품목명, 상태가공분류명, 누적 입고량
select warehouse_code, warehouse_name, product_code, product_name, product_category_name
, sum(stock_quantity) as'누적입고량'
from 공판장품목별입출고현황
where product_category_name = '(냉동)'
group by warehouse_code, warehouse_name, product_code, product_name, product_category_name
having 누적입고량 >= 1000
order by 누적입고량 DESC;

having은 group by 안에서 다시 조건을 넣을 때 쓰면 된다.
회고시간
아직은 좀 버벅거리긴 하지만 모르면 더 검색해보면서 해봤다. join함수가 역시 젤 어려운 것 같아서 이건 더 연습이 필요할 듯 하다. 나머지는 점점 감을 잡아간다.
'성동1기 전Z전능 데이터 분석가 과정' 카테고리의 다른 글
| [성동1기 전Z전능 데이터 분석가] 26일차 SQL 프로젝트 정합성 분석 (0) | 2023.11.20 |
|---|---|
| [성동1기 전Z전능 데이터 분석가] 25일차 SQL.5 (0) | 2023.11.17 |
| [성동1기 전Z전능 데이터 분석가] 23일차 SQL.3 (0) | 2023.11.15 |
| [성동1기 전Z전능 데이터 분석가] 21일차 데이터리터리시 6 (0) | 2023.11.13 |
| [성동1기 전Z전능 데이터 분석가] 19일차 - SQL.1 (0) | 2023.11.12 |