Hive面試題 累積報表

2021-09-29 20:58:43 字數 2228 閱讀 7867

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

使用者id    月份  小計  累積

u01 2017-01

1111

u01 2017-02

1223

u02 2017-01

1212

u03 2017-01

88u04 2017-01

33

##建立表

create table visittable

(userid varchar(20

),visitdate date,visitcount int)

;##新增資料

insert into visittable values

('u01'

,'2017/1/21'

,'5');

insert into visittable values

('u02'

,'2017/1/23'

,'6');

insert into visittable values

('u03'

,'2017/1/22'

,'8');

insert into visittable values

('u04'

,'2017/1/20'

,'3');

insert into visittable values

('u01'

,'2017/1/23'

,'6');

insert into visittable values

('u01'

,'2017/2/21'

,'8');

insert into visittable values

('u02'

,'2017/1/23'

,'6');

insert into visittable values

('u01'

,'2017/2/22'

,'4'

);

##獲取每個使用者每個月得總數

##substr:擷取

##獲取使用者擷取後的月份資訊,使用者id,月份訪問總數資訊,通過擷取後的月份資訊與使用者id進行分組生成使用者月份總訪問表

create table mymonthcount as

select userid,

substr

(visitdate,1,

7) as mydate,

sum(visitcount) as mycount

from visittable

group by substr

(visitdate,1,

7),userid;

查詢的結果

##使用自查詢,顯示右邊表的id,日期,左邊表的月份訪問量,總訪問量

##使用兩張表(使用者每月訪問表)的id進行關聯並且左表的月份要小於等於右表的月份

##按照右表的id與時間進行分組

select m2.userid,m2.mydate,

max(m1.mycount)

,sum

(m1.mycount)

from mymonthcount m1

join mymonthcount m2

on m1.userid = m2.userid

where m1.mydate <= m2.mydate

group by m2.userid,m2.mydate;

查詢的結果

Hive面試題三

2014010114 2014010216 2014010317 2014010410 2014010506 2012010609 2012010732 2012010812 2012010919 2012011023 2001010116 2001010212 2001010310 2001010...

報表統計 sql面試題

有3張表 學生表 s 字段 學生編號 學生姓名 課程表 c 字段 課程編號 課程名稱 成績表 sc 字段 學生編號 課程編號 分數 需要實現最終效果如下 後面有些課程省略沒有截圖了 實現的方法 方法一 select max s.name as姓名,max case when sc.cid 1 the...

報表統計 sql面試題

有3張表 學生表 s 字段 學生編號 學生姓名 課程表 c 字段 課程編號 課程名稱 成績表 sc 字段 學生編號 課程編號 分數 需要實現最終效果如下 後面有些課程省略沒有截圖了 實現的方法 方法一 select max s.name as姓名,max case when sc.cid 1 the...