저작권 문제로 인해, 직접 작성한 쿼리문만 공개.
23. 유량(Flow)와 저량(Stock)
https://solvesql.com/problems/flow-and-stock/
-- 첫번째 풀이
WITH yearly_count AS (
SELECT
EXTRACT(YEAR FROM acquisition_date) AS acquisition_year,
COUNT(*) AS Flow
FROM artworks
WHERE EXTRACT(YEAR FROM acquisition_date) IS NOT NULL
GROUP BY EXTRACT(YEAR FROM acquisition_date)
)
, Cumulative AS (
SELECT
Acquisition_year,
Flow,
SUM(Flow) OVER (ORDER BY Acquisition_year) AS Cumulative_Sum
FROM yearly_count
)
SELECT
Acquisition_year AS "Acquisition year",
Flow AS "New acquisitions this year (Flow)",
Cumulative_Sum AS "Total collection size (Stock)"
FROM Cumulative
WHERE Flow > 0
ORDER BY Acquisition_year
-- 두번째 풀이
WITH yearly_count AS (
SELECT
LEFT(acquisition_date, 4) AS Acquisition_year,
COUNT(*) AS Flow
FROM artworks
WHERE LEFT(acquisition_date, 4) IS NOT NULL
GROUP BY LEFT(acquisition_date, 4)
)
, cumulative_stock AS (
SELECT
Acquisition_year,
Flow,
SUM(Flow) OVER (ORDER BY Acquisition_year) AS Cumulative_Sum
FROM yearly_count
)
, comparison_prev_year AS (
SELECT
Acquisition_year,
Flow AS Flow,
Cumulative_Sum AS Stock,
CASE WHEN LAG(Cumulative_Sum) OVER(ORDER BY Acquisition_year) IS NULL THEN 0
ELSE LAG(Cumulative_Sum) OVER(ORDER BY Acquisition_year)
END AS LAG_Cumulative_Sum,
CASE WHEN Cumulative_Sum = LAG(Cumulative_Sum) OVER(ORDER BY Acquisition_year) THEN 'target'
ELSE 'non_target'
END AS comparison
FROM cumulative_stock
)
SELECT
Acquisition_year AS "Acquisition year",
Flow AS "New acquisitions this year (Flow)",
Stock AS "Total collection size (Stock)"
FROM comparison_prev_year
WHERE comparison = 'non_target'
ORDER BY Acquisition_year
'sql > Advent of SQL 2024' 카테고리의 다른 글
SQL 문제 풀이 챌린지(25/25) - 메리 크리스마스 2024 (0) | 2024.12.25 |
---|---|
SQL 문제 풀이 챌린지(24/25) - 세 명이 서로 친구인 관계 찾기 (0) | 2024.12.25 |
SQL 문제 풀이 챌린지(22/25) - 친구 수 집계하기 (0) | 2024.12.22 |
SQL 문제 풀이 챌린지(21/25) - 세션 유지 시간을 10분으로 재정의하기 (0) | 2024.12.21 |
SQL 문제 풀이 챌린지(20/25) - 미세먼지 수치의 계절간 차이 (0) | 2024.12.20 |