hive sql系列(三)——求所有用户和活跃用户的总数及平均年龄
每天分享一个sql,帮助大家找到sql的快乐
需求:求所有用户和活跃用户的总数及平均年龄
建表语句
create table user_age(dt string,user_id string,age int
)
row format delimited fields terminated by '\t'
;
数据
insert overwrite table user_age values
("2019-02-11","test_1","23"),
("2019-02-11","test_2","19"),
("2019-02-11","test_3","39"),
("2019-02-11","test_1","23"),
("2019-02-11","test_3","39"),
("2019-02-11","test_1","23"),
("2019-02-12","test_2","19"),
("2019-02-13","test_1","23"),
("2019-02-15","test_2","19"),
("2019-02-16","test_2","19");
实现
select0 user_total_count,0 user_total_avg_age,count(*) twice_count,cast(sum(age)/count(*) as decimal(10,2)) twice_count_avg_age
from
(selectuser_id,min(age) age
from(selectuser_id,min(age) agefrom(selectuser_id,age,date_sub(dt,rk) flagfrom(selectdt,user_id,min(age) age,rank() over(partition by user_id order by dt) rkfromuser_agegroup bydt,user_id)t1)t2group byuser_id,flaghavingcount(*)>=2)t3
group byuser_id
)t4
union all
selectcount(*) user_total_count,cast(sum(age)/count(*) as decimal(10,2)),0 twice_count,0 twice_count_avg_age
from(selectuser_id,min(age) as agefromuser_agegroup by user_id)t5
;
结果
结果
OK
_u1.user_total_count _u1.user_total_avg_age _u1._c2 _u1._c3
0 0.0 2 19.00
3 27.0 0 0.00
分析
1、这里有两次去重,第一次去重是一个用户一天内多次访问,只算一次,第二次一个用户有多个连续登录,那么实际情况中,第一次去重是常规操作,第二次去重根据公司实际要求来做
2、活跃用户是指连续两天及以上,所以count(*)>=2
3、date_sub(dt,rank) flag这个是核心逻辑,语言不好描述,举例说明:(03-22,1)(03-27,2),(03-28,3),(03-29,4),通过日期相减后得到的值都是结果是03-21,03-25,只有03-25的结果是日期是连续的
4、这里需要计算所有用户的平均年龄和活跃用户的平均年龄,维度不同,在不同的列展示,而union all需要保证列数相同,所以这里需要补默认值
扩展
min(age)作用:
1、满足分组时把age从子查询带出
2、用户每天登录,年龄可能会随着日期变化,所以潜在的计算规则中是每次根据用户和日期分组时取最小年龄
知识点
1、date_sub(日期,数值)表示用日期-数值,返回日期字符串
2、cast(数据类型1 as 数据类型2)表示将数据类型1强转成数据类型2
3、decimal(10,2)是整数位长度为10,小数位长度为2,如果没有小数位,默认补0
hive sql系列(三)——求所有用户和活跃用户的总数及平均年龄相关推荐
- hive sql系列(二)——统计每个人每个月访问量和累计月访问量
每天分享一个sql,帮助大家找到sql的快乐 需求:统计每个人每个月访问量和累计月访问量 建表语句 CREATE TABLE visit( userId string, visitDate strin ...
- hive sql趣味题-求两两的共同好友
初始条件 给出以下两列,分别为用户和用户的好友列表,要求求两两的共同好友. user friend_list a b,c,d b c,d,e c a,f d a,e 建表 CREATE TABLE ` ...
- 【AD用户配置系列三】文件夹重定向为用户登录与注销加速
在前面两篇文章中(让IT省心省力的漫游配置文件和批量修改漫游配置文件路径),跟大家介绍了漫游配置文件在企业IT基础环境管理中的使用方法.通过漫游配置文件实现了用户配置文件的集中管理:这对企业IT部门来 ...
- hive 学习系列三(表格的创建create-table)
表格创建: 语法 第一种建表的形式:说明: temporary 临时表,在当前回话内,这张表有效,当回话结束,可以理解为程序结束,则程序终止. external 外部表, hdfs 上的表的文件,并非 ...
- hive sql练习_经典的SparkSQL/Hive-SQL/MySQL面试-练习题
经典的SparkSQL/Hive-SQL/MySQL面试-练习题mp.weixin.qq.com 第一题 需求: 已知一个表order,有如下字段:date_time,order_id,user_i ...
- 系统架构系列 (三):业务架构实战上篇
引言 业务架构一般不被开发重视,开发人员喜欢追求新技术,而技术是服务于业务的,现在没有一项技术是自娱自乐的,一定要支撑业务,否则没有场景.设计好业务架构要考虑的方面比较多,要做到业务彼此隔离.业务与技 ...
- 安卓应用用户数据_用户指标数据应用
一.如何理解数据 用户数据:gender:性别. birthday:出生日期 行为数据:user_id:用户id.auction_id:购买行为编号.buy_mount:购买数量.day:购买时间 商 ...
- 活跃用户的测算方法与用户黏性指数的提出
研究互联网的同志应该都有听说过DAU(日活跃用户数).WAU(周活跃用户数)MAU(月活跃用户数),但是具体这些数字是怎么测算的?他们彼此之间又是怎样的关系?在本文中,笔者试图谈谈自己的一些思考,请大 ...
- 产品思考:如何计算资讯类产品的日活跃用户天花板?
作者:lei 全文共 1834 字 2 图,阅读需要 4 分钟 ---- / BEGIN / ---- 结合市场现状及合理假设,请推算出资讯类 App 日活跃用户数 DAU 的天花板? 前 2 天,一 ...
最新文章
- Android okHttp上传图片
- python expected an indented block什么意思
- jquery获得下拉框的值
- java httpclient 异步请求_Java利用httpasyncclient进行异步HTTP请求
- Postgres 9.2.4的升级方案与步骤
- Ubuntu14.04下安装Chrome出现“未安装软件包 libappindicator1”问题的解决办法
- Python之数据分析(规范数据生成器Faker,学习、数据分析、开发测试专用)
- 51单片机指针c语言,单片机C语言教程:C51指针的使用
- Linux目录树与文件系统
- 【火灾检测】基于matlab图像特征火灾检测【含Matlab源码 897期】
- Mybatis 拦截器报错
- vmware虚拟机共享文件夹设置(xp)
- 13.罗马数字转数字
- 【Python数据分析】二手车价格预测
- 达威尔液晶电子手写板儿童涂鸦画板写字板,培养小孩创造力和想象力的好工具!
- 分享一款免费下载音乐的软件
- 前端应届生如何做一个职业规划
- 进入BeOS的花花世界 系列四
- BOM物料清单及生产计划的分解
- 假作真时真亦假,无为有处有还无
热门文章
- 蓝桥杯练习题十三 - 第几个幸运数(c++)
- 单片机原理及应用c51周国运_实用!百万工程师都在使用的单片机开发产品流程...
- 语音噪声---学习笔记
- Android平台多屏播放同步方案
- 毕业年薪20万起!24届南京理工大学自动化最新三年考研院校分析
- nginx进程杀不掉解决方案
- Java教程:如何申请Java开发微信支付中的必要参数(appid,appsecret,商户号,微信支付密钥)
- 大臣得誉,非国家之美
- 阿里无人超市亮相乌镇,微笑购物能打折!诺奖得主现场点赞!
- 基于通道注意机制联合多尺度卷积神经网络的滚动轴承故障诊断