利用SQL语句实现分析需求(2)

本文介绍了如何使用Hive SQL实现级联求和以统计用户每月累计小费,并展示了如何构建漏斗模型,计算转化率和漏出率。此外,还提到了工作流调度任务的打包上传流程。
摘要由CSDN通过智能技术生成

hive的级联求和

首先创建源数据表:

    create table t_salary_detail(username string,month string,salary int)
row format delimited fields terminated by ',';
load data local inpath '/export/servers/hivedatas/accumulate/t_salary_detail.dat' into table t_salary_detail;

源数据如下:
在这里插入图片描述
需求:统计每个用户每个月总共获得多少小费

select t.month,t.username,sum(salary) as salSum
from t_salary_detail t 
group by t.username,t.month;

在这里插入图片描述
需求:统计每个用户累计小费

第一步:求每个用户的每个月的小费总和

 select t.month,t.username,sum(salary) as salSum
from t_salary_detail t 
group by t.username,t.month;

在这里插入图片描述

第二步:使用inner join 实现自己连接自己

select
A.* ,B.*
from
(select t.month,t.username,sum(salary) as salSum
from t_salary_detail t 
group by t.username,t.month) A
inner join 
(select t.month,t.username,sum(salary) as salSum
from t_salary_detail t 
group by t.username,t.month) B
on A.username = B.username;

±---------±------------±----------±---------±------------±----------±-+
| a.month | a.username | a.salsum | b.month | b.username | b.salsum |
±---------±------------±----------±---------±------------±----------±-+
取这一个作为一组
| 2015-01 | A | 33 | 2015-01 | A | 33 |33

| 2015-01 | A | 33 | 2015-02 | A | 10 |
| 2015-01 | A | 33 | 2015-03 | A | 16 |
取这两个作为一组
| 2015-02 | A | 10 | 2015-01 | A | 33 |
| 2015-02 | A | 10 | 2015-02 | A | 10 |43

| 2015-02 | A | 10 | 2015-03 | A | 16 |
取这三个作为一组
| 2015-03 | A | 16 | 2015-01 | A | 33 |
| 2015-03 | A | 16 | 2015-02 | A | 10 |
| 2015-03 | A | 16 | 2015-03 | A | 16 |59

| 2015-01 | B | 30 | 2015-01 | B | 30 |
| 2015-01 | B | 30 | 2015-02 | B | 15 |
| 2015-01 | B | 30 | 2015-03 | B | 17 |
| 2015-02 | B | 15 | 2015-01 | B | 30 |
| 2015-02 | B | 15 | 2015-02 | B | 15 |
| 2015-02 | B | 15 | 2015-03 | B | 17 |
| 2015-03 | B | 17 | 2015-01 | B | 30 |
| 2015-03 | B | 17 | 2015-02 | B | 15 |
| 2015-03 | B | 17 | 2015-03 | B | 17 |
±---------±------------±----------±---------±------------±----------±-+

加参数继续变形

select
A.* ,B.*
from
(select t.month,t.username,sum(salary) as salSum
from t_salary_detail t 
group by t.username,t.month) A
inner join 
(select t.month,t.username,sum(salary) as salSum
from t_salary_detail t 
group by t.username,t.month) B
on A.username = B.username
where B.month <= A.month;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值