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...