문제
보고를 위해 사용자가 가입한 수를 유용한 날짜 범위 간격(빈)으로 그룹화하여 파악해야 합니다.
또한 동일한 날짜 빈 기준의 사용자 총수도 알아야 합니다.
해결 방법
다음 쿼리는 user.created_at 컬럼을 연-월 문자열로 변환하고 해당 월 “빈” 내의 사용자 수를 집계하는 공통 테이블 표현(CTE)을 생성하여 동작합니다.
이후 윈도우 연산(OVER)을 사용하여 count의 누적 합을 생성합니다.
WITH data as (
SELECT
TO_CHAR(u.created_at,'yyyy-MM') AS yeardate,
COUNT(*)
FROM users u
GROUP BY yeardate
ORDER BY yeardate
)
SELECT
yeardate,
count,
SUM(count::int) OVER (
order by yeardate asc rows between unbounded preceding and current row
) AS cumulative
FROM data
OVER 구문은 SO(스택 오버플로우)에서 복사한 것이므로, 모든 옵션이 엄격히 필요한지 알 수 없습니다.
yeardate의 포맷을 변경하여 날짜 빈의 크기를 쉽게 조정할 수 있습니다.