SELECT File_Type, SoldFlag
, sum(ItemCount) inven_unit
, sum(SoldCount) sold_unit
FROM inventory i
GROUP BY 1,2
ORDER BY 1,2
;

month_of_coverage 결과 201개월이 지나야 남은 재고를 다 팔 수 있겠다SELECT File_Type, SoldFlag
, sum(ItemCount) inven_unit
, sum(SoldCount) sold_unit
, sum(ItemCount) / (sum(SoldCount)/6) month_of_coverage
FROM inventory i
WHERE SoldFlag = 1
AND File_Type = 'Historical'
GROUP BY 1,2
;

SELECT File_Type, SoldFlag
, sum(ItemCount) inven_unit
, round(avg(PriceReg), 1) avg_price
, round(sum(ItemCount * PriceReg), 0) inven_cost
FROM inventory i
WHERE PriceReg > 0 -- PriceReg값이 0인 경우가 포함되는 것을 방지 (혹시 모를 음수값의 경우도)
GROUP BY 1,2
;

SELECT File_Type, SoldFlag
, sum(ItemCount) inven_unit
, round(avg(PriceReg), 0) avg_list_price
, round(avg(LowNetPrice), 0) avg_net_price
, round(avg((PriceReg - LowNetPrice) / PriceReg)*100, 1) discount
FROM inventory i
WHERE PriceReg > 0
GROUP BY 1,2
;

New_Release_Flag = 1 : 최신 sku물품 출시 / New_Release_Flag = 0 : 현재 버전이 최신SELECT SKU_number, count(DISTINCT New_Release_Flag) cnt
FROM inventory i
GROUP BY SKU_number
HAVING cnt > 1 -- 신상 미출시면 cnt = 1 / 출시했다면 2 이상의 값을 가질 것
ORDER BY SKU_number
;

SELECT *
FROM inventory i
WHERE SKU_number = 58313
;

SELECT File_Type, SoldFlag
, round(avg(ReleaseYear), 0) avg_year
, round(avg(2019-ReleaseYear), 1) avg_aging
FROM inventory i
WHERE ReleaseYear > 0
AND New_Release_Flag = 0
GROUP BY 1,2
ORDER BY avg_aging DESC
;

조건문을 단일/다중으로 활용하여 조건에 따른 결과값을 새로운 컬럼으로 생성
-- 단일 컬럼 조건
SELECT
CASE File_Type
WHEN 'Historical' THEN '악성재고'
WHEN 'Active' THEN '활성재고'
ELSE '기타' -- 현재 데이터는 기타가 발생할 여지 x
END AS File_Type2
, sum(ItemCount) AS inven_unit
, sum(SoldCount) AS sold_unit
FROM inventory i
GROUP BY 1
ORDER BY 1
;
-- 다중 컬럼 조건 >> CASE 옆에 컬럼 명시하지않고 WHEN절에 입력
SELECT
CASE
WHEN File_Type = 'Historical' AND SoldFlag = 0 THEN '3. Historical'
WHEN File_Type = 'Historical' AND SoldFlag = 1 THEN '2. Semi-Active'
WHEN File_Type = 'Active' THEN '1. Active'
ELSE 'Others'
END AS File_Type2
, sum(ItemCount) AS inven_unit
, sum(SoldCount) AS sold_unit
FROM inventory i
GROUP BY 1
ORDER BY 1
;
위 결과에서 각 inven_unit이 전체 unit의 몇 %인지 계산
→ 각 행별로 전체 inven unit 값 열을 추가하여 계산하고자 함 >> Window Function 사용
SELECT File_Type2, inven_unit
, sum(inven_unit) over() AS total_inven_unit
, round(inven_unit / sum(inven_unit) over() * 100, 1) AS pct
FROM (
SELECT
CASE
WHEN File_Type = 'Historical' AND SoldFlag = 0 THEN '3. Historical'
WHEN File_Type = 'Historical' AND SoldFlag = 1 THEN '2. Semi-Active'
WHEN File_Type = 'Active' THEN '1. Active'
ELSE 'Others'
END AS File_Type2
, sum(ItemCount) AS inven_unit
, sum(SoldCount) AS sold_unit
FROM inventory i
GROUP BY 1
ORDER BY 1
) sub
;

위 결과의 마지막 행에 총 합계를 나타내는 Total도 추가하고자 함
→ 위에서 활용한 query를 WITH절로 임시 테이블로 생성
WITH sub AS (
SELECT
CASE
WHEN File_Type = 'Historical' AND SoldFlag = 0 THEN '3. Historical'
WHEN File_Type = 'Historical' AND SoldFlag = 1 THEN '2. Semi-Active'
WHEN File_Type = 'Active' THEN '1. Active'
ELSE 'Others'
END AS File_Type2
, sum(ItemCount) AS inven_unit
, sum(SoldCount) AS sold_unit
FROM inventory i
GROUP BY 1
ORDER BY 1
)
SELECT File_Type2
, inven_unit
, round(inven_unit / sum(inven_unit) OVER () * 100, 1) AS pct
FROM sub
UNION ALL
SELECT 'Total' AS File_Type2
, sum(inven_unit) AS inven_unit
, sum(inven_unit) / sum(inven_unit) * 100 AS pct
FROM sub
;
