문제
SQLite
내가 작성한 정답
with a as (select strftime('%Y',acquisition_date) year,
count(artwork_id) ad
from artworks
group by year
having year is not null)
select year "Acquisition year",
ad "New acquisitions this year (Flow)",
sum(ad) over (order by year) "Total collection size (Stock)"
from a
order by 1
윈도우 함수
: 주로 집계 함수와 함께 사용되며, 각 행에 대해 계산된 결과를 반환하지만, 그룹화된 결과와는 달리 전체 데이터 집합을 유지하면서도 특정 기준에 따라 계산한다.
<집계 함수> OVER ([PARTITION BY <컬럼>] [ORDER BY <컬럼>] [ROWS 또는 RANGE <범위>])
- 집계 함수: SUM, AVG, COUNT, ROW_NUMBER, RANK, DENSE_RANK 등.
- OVER: 윈도우 함수를 지정하는 키워드.
- PARTITION BY: 데이터 집합을 특정 컬럼을 기준으로 나누는 부분. 이 부분이 없으면 전체 데이터 집합을 하나의 그룹으로 생각한다.
- ORDER BY: 각 파티션 내에서 데이터의 정렬 순서를 지정한다.
- ROWS 또는 RANGE: 특정 범위를 지정하여 윈도우를 정의하며 선택사항이다.
행 유지: 윈도우 함수는 각 행에 대해 계산된 결과를 반환하며, 원래의 데이터 구조를 유지한다.
집계와 분석: 집계 결과를 각 행에 함께 제공하여 더욱 풍부한 데이터 분석을 가능하게 한다.
파티셔닝: 그룹화된 집계와 달리, 파티셔닝을 통해 더 세밀하게 데이터를 나눌 수 있다.
SELECT column_name, SUM(column_name) OVER (PARTITION BY another_column) FROM table_name;
Share article