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