Hive 使用SQL統計出每個使用者的累積訪問次數

2021-10-19 22:31:34 字數 3980 閱讀 7190

我們有如下的使用者訪問資料

userid	visitdate	visitcount

u01 2017/1

/215u02 2017/1

/236u03 2017/1

/228u04 2017/1

/203u01 2017/1

/236u01 2017/2

/218u02 2017/1

/236u01 2017/2

/224

要求使用sql統計出每個使用者的累積訪問次數,如下表所示:

使用者id 月份 小計 累積

u01	2017-01

1111

u01 2017-02

1223

u02 2017-01

1212

u03 2017-01

88u04 2017-01

33

資料集

u01	2017/1

/215u02 2017/1

/236u03 2017/1

/228u04 2017/1

/203u01 2017/1

/236u01 2017/2

/218u02 2017/1

/236u01 2017/2

/224

1)建立表

create

table

action

(userid string,

visitdate string,

visitcount int

)row format delimited fields

terminated

by"\t"

;

2)修改資料格式

select userid,

date_format(regexp_replace(visitdate,

"/",

"-")

,'yyyy-mm'

)month

, visitcount

from

action

;

3)計算每人單月訪問量

with a as

(select userid,

date_format(regexp_replace(visitdate,

"/",

"-")

,'yyyy-mm'

)month

, visitcount

from

action

)select userid,

month

,sum

(visitcount) ct

from a group

by userid,

month

;

4)按月累計訪問量

with a as

(select userid,

date_format(regexp_replace(visitdate,

"/",

"-")

,'yyyy-mm'

)month

, visitcount

from

action),

b as

(select userid,

month

,sum

(visitcount) ct

from a

group

by userid,

month

)select userid,

month

, ct,

sum(ct)

over

(distribute by userid sort by

month

)from b;

或者也可以是

select userid,

mn,mn_count,

sum(mn_count)

over

(partition

by userid order

by mn)

from

(select userid,

mn,sum(visitcount) mn_count

from

(select userid,

date_format(regexp_replace(visitdate,

'/',

'-')

,'yyyy-mm'

) mn,

visitcount

from

action

) t1

group

by userid, mn) t2;

執行結果

+

------+

-------

+--+--

+|userid|month |ct|c3|+--

----+--

-----+

--+--+

|u01 |

2017-01

|11|11

||u01 |

2017-02

|12|23

||u02 |

2017-01

|12|12

||u03 |

2017-01

|8|8

||u04 |

2017-01

|3|3

|+------+

-------

+--+--

+

要求使用sql統計出每個使用者的累積訪問次數

1 首先求出每個使用者每月的累計訪問次數

2 同一使用者不同月份的資料進行聚合,即(distribute by userid sort by month)

如果是求每個月不同使用者的累計訪問次數呢?如下

with a as

(select userid,

date_format(regexp_replace(visitdate,

"/",

"-")

,'yyyy-mm'

)month

, visitcount

from

action),

b as

(select userid,

month

,sum

(visitcount) ct

from a

group

by userid,

month

)select

month

, userid,

ct,sum(ct)

over

(distribute by

month sort by userid)

from b;

執行結果如下

+

-------

+------+--

+--+|month |userid|ct|c3|+--

-----+

------+

--+--+

|2017-01

|u01 |11|

11||2017-01

|u02 |12|

23||2017-01

|u03 |8|

31||2017-01

|u04 |3|

34||2017-02

|u01 |12|

12|+--

-----+

------+

--+--+

python利用dict統計每個文字的出現次數

在乙個群裡看到有個群友有個需求 有八門課的名單,每行名單為每門課的名單,想統計每個人選課的次數 資料形式如下 思路 讀取所有名單,利用set集合建立不重複的list,然後建立字典,再利用字典的key對名單進行遍歷 知識點 coding utf 8 author fff zrx filepath te...

mysql統計出每個姓氏的人數 Mysql資料分析

mysql是關係型資料庫,sql語言可以很好地對資料庫進行操作管理,進而進行資料分析。現對使用者消費資料進行初步分析,資料均 於 無涉及使用者隱私資料。一 建立資料庫 建立資料庫基本操作 create database 資料庫名 二 建立表 建立資料庫基本操作 create table 表名 欄位名...

使用hive做單詞統計

1 首先建立乙個檔案單詞的檔案,例如a.txt kk,123,weiwei,123 hlooe,hadoop,hello,ok h,kk,123,weiwei,ok ok,h 2 將檔案上傳到hdfs中 hdfs dfs copyfromlocal a.txt upload wangwei a.tx...