본문 바로가기
Tech/Database

누적 데이터 query

by Augustine™ 2018. 7. 11.
반응형

쇼핑몰 데이터를 집계할 때, 일자별 합계는 날짜별로 묶어 SUM을 이용해 간단히 구할 수 있다. 일자별 누적 데이터도 필요할 때가 있다. 


CREATE TABLE purchase_log(
    dt              varchar(255)
  , order_id        integer
  , user_id         varchar(255)
  , purchase_amount integer
);

INSERT INTO purchase_log
VALUES
    ('2014-01-01',  1, 'rhwpvvitou', 13900)
  , ('2014-01-01',  2, 'hqnwoamzic', 10616)
  , ('2014-01-02',  3, 'tzlmqryunr', 21156)
  , ('2014-01-02',  4, 'wkmqqwbyai', 14893)
  , ('2014-01-03',  5, 'ciecbedwbq', 13054)
  , ('2014-01-03',  6, 'svgnbqsagx', 24384)
  , ('2014-01-03',  7, 'dfgqftdocu', 15591)
  , ('2014-01-04',  8, 'sbgqlzkvyn',  3025)
  , ('2014-01-04',  9, 'lbedmngbol', 24215)
  , ('2014-01-04', 10, 'itlvssbsgx',  2059)
  , ('2014-01-05', 11, 'jqcmmguhik',  4235)
  , ('2014-01-05', 12, 'jgotcrfeyn', 28013)
  , ('2014-01-05', 13, 'pgeojzoshx', 16008)
  , ('2014-01-06', 14, 'msjberhxnx',  1980)
  , ('2014-01-06', 15, 'tlhbolohte', 23494)
  , ('2014-01-06', 16, 'gbchhkcotf',  3966)
  , ('2014-01-07', 17, 'zfmbpvpzvu', 28159)
  , ('2014-01-07', 18, 'yauwzpaxtx',  8715)
  , ('2014-01-07', 19, 'uyqboqfgex', 10805)
  , ('2014-01-08', 20, 'hiqdkrzcpq',  3462)
  , ('2014-01-08', 21, 'zosbvlylpv', 13999)
  , ('2014-01-08', 22, 'bwfbchzgnl',  2299)
  , ('2014-01-09', 23, 'zzgauelgrt', 16475)
  , ('2014-01-09', 24, 'qrzfcwecge',  6469)
  , ('2014-01-10', 25, 'njbpsrvvcq', 16584)
  , ('2014-01-10', 26, 'cyxfgumkst', 11339)
;


먼저, WITH 구문을 이용해서, 날짜별로 합계를 구한 임시테이블을 만든다. 그 다음 partiton by 구문을 이용해서 연, 월 단위로 창을 만든 다음, 앞서 구한 일별 구매합계에서 다시 sum을 사용해서 누적 데이터를 구한다.

WITH
daily_purchase as (
	SELECT
		dt
		, substring(dt, 1, 4) as year
		, substring(dt, 6, 2) as month
		, substring(dt, 9, 2) as date
		, SUM(purchase_amount) as amt
	FROM purchase_log
	GROUP BY dt
)
SELECT
	dt
	, concat(year,'-',month) as year_month
	, amt
	, sum(amt) over(partition by year, month order by dt rows unbounded preceding)
	as acc_amt
FROM daily_purchase
Order by dt;	



반응형

'Tech > Database' 카테고리의 다른 글

SQL Server 권한 부여  (0) 2018.07.14
SQLServer Login & User 의 이해  (1) 2018.07.12
주식 데이터 이평선 쿼리 구현  (2) 2018.07.10
PostgreSQL for DBA - 작성중  (0) 2018.07.10
PostgreSQL - Record to column  (0) 2018.07.08

댓글