반응형
쇼핑몰 데이터를 집계할 때, 일자별 합계는 날짜별로 묶어 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 |
댓글