累計資料的SQL寫法

2021-09-01 22:21:04 字數 1834 閱讀 7926

在常常會用到累計資料的分析,例如:歷史累計量,按年累計量,按月計算累計量,按周計算累計量。

下面是乙個通過分析函式來實現的累計資料分析:

歷史累計: 是最容易的,直接用乙個分析函式:

語法:sum(xx) over (partition by country order by date) 這個函式的意思是指: 對xx這個指標在country的分組,並且在date的順序進行做累計資料計算

例如:

select t.date_id, t.country_id, t.platform_id,t.newuser, sum(t.newuser) over(partition by t.country_id, t.platform_id order by t.date_id) as totaluser_history from browser_use_os_f t where t.date_id>=20130101 and t.country_id=2 and t.platform_id=4

row date_id country_id platform newuser totaluser_history

1 20130101 2 4 13262 13262

2 20130102 2 4 15553 28815

3 20130103 2 4 16418 45233

4 20130104 2 4 16524 61757

5 20130105 2 4 17093 78850

6 20130106 2 4 16316 95166

7 20130107 2 4 15965 111131

8 20130108 2 4 16496 127627

9 20130109 2 4 17185 144812

10 20130110 2 4 16770 161582

按年累計: 這種可以演化推廣到周累計,月累計,季累計等等。

語法:

sum(t.newuser) over(partition by t.country_id, t.platform_id order by t.date_id  rows between to_date(date_id,'yyyy-mm-dd')-to_date(substr(date_id,0,4)||'0101','yyyy-mm-dd') preceding  and current row) as totaluseryesr

這個語句看起來複雜,其實可以其實也簡單,就是在原來的基礎上新增了 rows between 1 preceding and current row 這種樣式的內容,新增了視窗,並且這個視窗的資料區間是跟據時間來變化的。

to_date(date_id,'yyyy-mm-dd')-to_date(substr(date_id,0,4)||'0101','yyyy-mm-dd')

這一行的意思是,計算當前年到當前資料一共有多少行,通過行數來計算。

row between xx preceding and xx following 樣式的類容詳細總結如下:

range between unbounded preceding and current row 指定計算當前行開始、當前行之前的所有值;

rows between 1 preceding and current row 指定計算當前行的前一行開始,其範圍一直延續到當前行;

range between current row and unbounded following 指定計算從當前行開始,包括它後面的所有行;

rows between current row and 1 following 指定計算當前行和它後面的一行;

sql 累計佔比 sql統計佔比和統計數量

在工作中經常遇到統計佔比的需求,有時候還要把沒有值得統計為0,如何寫sql呢?下面寫乙個小例子,作為參考,方便以後查閱.資料準備 create table t group id number not null,name varchar2 100 alter table t group add pri...

sql中資料相減求當天累計值

資料庫中當前時間的資料減當天0點的值,算出今天的累計量。如果現在時間為0點,則減去前一晚0點的值。declare newvalue int declare oldvalue int declare newtime datetime declare oldtime datetime select ne...

幾種SQL語句的寫法

1.一張表中有使用者資訊表user user id,nickname 另外一張表聯絡人表contact user id,friend id 現在要找出聯絡人的資訊 1 selectu1.nicknameasmyselft,u2.nicknameasfriendfromcontact cinnerjo...