走进大数据丨 一条让我虎躯一震的SQL
有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续两天都有访问记录的用户)
日期 用户 年龄
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
CREATE TABLE user_age (
dt string,
user_id string, age INT )
ROW format delimited FIELDS TERMINATED BY ',';
1)按照日期以及用户分组,按照日期排序并给出排名
selectdt,user_id,min(age) age,rank() over(partition by user_id order by dt) rk
fromuser_age
group bydt,user_id;t1
2)计算日期及排名的差值
selectuser_id,age,date_sub(dt,rk) flagfromt1;t2
3)过滤出差值大于等于2的,即为连续两天活跃的用户
selectuser_id,min(age) agefromt2group byuser_id,flaghavingcount(*)>=2;t3
4)对数据进行去重处理(一个用户可以在两个不同的时间点连续登录),例如:a用户在1月10号1月11号以及1月20号和1月21号4天登录。
selectuser_id,min(age) agefromt3group byuser_id;t4
5)计算活跃用户(两天连续有访问)的人数以及平均年龄
selectcount(*) ct,cast(sum(age)/count(*) as decimal(10,2))from t4;
6)对全量数据集进行按照用户去重
selectuser_id,min(age) agefromuser_agegroup byuser_id;t5
7)计算所有用户的数量以及平均年龄
selectcount(*) user_count,cast((sum(age)/count(*)) as decimal(10,1))fromt5;
8)将第5步以及第7步两个数据集进行union all操作
select0 user_total_count,0 user_total_avg_age,count(*) twice_count,cast(sum(age)/count(*) as decimal(10,2)) twice_count_avg_agefrom(selectuser_id,min(age) agefrom(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)t3group byuser_id)t4union allselectcount(*) user_total_count,cast((sum(age)/count(*)) as decimal(10,1)),0 twice_count,0 twice_count_avg_agefrom(selectuser_id,min(age) agefromuser_agegroup byuser_id)t5;t6
9)计算最终结果
selectsum(user_total_count),sum(user_total_avg_age),sum(twice_count),sum(twice_count_avg_age)from(select0 user_total_count,0 user_total_avg_age,count(*) twice_count,cast(sum(age)/count(*) as decimal(10,2)) twice_count_avg_agefrom(selectuser_id,min(age) agefrom(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)t3group byuser_id)t4union allselectcount(*) user_total_count,cast((sum(age)/count(*)) as decimal(10,1)),0 twice_count,0 twice_count_avg_agefrom(selectuser_id,min(age) agefromuser_agegroup byuser_id)t5)t6;
走进大数据丨 一条让我虎躯一震的SQL相关推荐
- oracle 加载数据戽_走进大数据丨 ETL - Load(数据加载)
LOAD 加载经转换和汇总的数据到目标数据仓库中,可实现SQL或批量加载数据加载(Load) 经过数据转换生成的文件的结构与数据仓库数据表的结构完全一致,可以直接通过数据加载工具,以Bulk Load ...
- 走进大数据丨 数据仓库和数据库的区别
一.数据仓库 1. 什么是数据仓库? 数据仓库(Data Warehouse),可简写为DW或DWH,数据仓库,是为了企业所有级别的决策制定计划过程,提供所有类型数据类型的战略集合.它出于分析性报告和 ...
- 工业大数据丨“宝刀”在手,却也要驭刀有术
工业大数据丨"宝刀"在手,却也要驭刀有术 青龙偃月.大夏龙雀,在武林江湖中,刀是一种仅次于剑的武器,刃向一边,恩怨分明,至刚尤猛.能拥有一把宝刀的侠客,才配称之为江湖豪杰,而宝刀, ...
- 关于“大数据”的15条干货思考
文章讲的是关于"大数据"的15条干货思考,1.马云创造了"DT"(大数据时代)这个词,说未来社会不是IT时代,而是DT时代,而阿里巴巴战略定位为做DT时代的基础 ...
- SqlBulkCopy类进行大数据(一万条以上)插入测试
SqlBulkCopy类进行大数据(一万条以上)插入测试 转载于:https://www.cnblogs.com/macT/p/10213882.html
- python大数据招聘信息_2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万!...
原标题:2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万! 看了Boss直聘发布的<2017互联网人才趋势白皮书>,奇小酷只有一句话要说,新的一年,希望大家火的像Py ...
- 第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL
第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL 文章目录 第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL 第一节 Fink SQL快速上手 1. ...
- 大数据丨ClickHouse在京东能源管理平台的实践
ClickHouse是一款面向大数据场景下的OLAP数据库,相比于传统的基于Hadoop生态圈的OLAP大数据分析系统,ClickHouse具有极致的查询性能.轻量级的架构设计及维护简单等优势.目前社 ...
- 大数据窥探:关于大数据的15条干货思考
马云创造了"DT"(大数据时代)这个词,说未来社会不是IT时代,而是DT时代,而阿里巴巴战略定位为做DT时代的基础设施.类似于IT时代的微软,移动互联网时代的苹果之类的意思.马云去 ...
- 你所不知道的大数据:一条微博得到王思聪手机号
互联网已成为人们生活工作的重要组成部分,时时的网路连接不只带来便捷,也将我们所有数据保存到了网络空间中.然而这些越积越多的个人大数据,却为黑客入侵攻击大开方便之门.在今天举办的中国互联网安全大会(IS ...
最新文章
- python编码规范手册-Python官方竟然给出了一种编码规范PEP 8
- 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
- 【数据库设计-3】菜单设计
- 服务器与客户端连接 聊天机器人
- Webstorm设置开发模板
- 容器编排技术 -- Kubernetes kubectl create secret 命令详解
- [转]Spring数据库读写分离
- python常用排序_python中的各种排序
- Caffe Batch Normalization推导
- codeforces 984 A. Game
- maven的安装配置超详细教程【含nexus】
- 安装inotify-tools监控工具
- Discuz 2.0 英文版 源码分析 一
- 西门子S7-200SMART四种密码解密软件
- 抖音api开放平台对接_抖音视频API解析接口
- html播放m3u8格式转换,使用HTML视频标签播放m3u8文件
- 这些信贷数据埋点中不得不知的埋点知识
- Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)
- C语言 强符号与弱符号
- 数据工程指南高级技能:处理框架