有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续两天都有访问记录的用户)

日期    用户    年龄

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相关推荐

  1. oracle 加载数据戽_走进大数据丨 ETL - Load(数据加载)

    LOAD 加载经转换和汇总的数据到目标数据仓库中,可实现SQL或批量加载数据加载(Load) 经过数据转换生成的文件的结构与数据仓库数据表的结构完全一致,可以直接通过数据加载工具,以Bulk Load ...

  2. 走进大数据丨 数据仓库和数据库的区别

    一.数据仓库 1. 什么是数据仓库? 数据仓库(Data Warehouse),可简写为DW或DWH,数据仓库,是为了企业所有级别的决策制定计划过程,提供所有类型数据类型的战略集合.它出于分析性报告和 ...

  3. 工业大数据丨“宝刀”在手,却也要驭刀有术

    工业大数据丨"宝刀"在手,却也要驭刀有术 青龙偃月.大夏龙雀,在武林江湖中,刀是一种仅次于剑的武器,刃向一边,恩怨分明,至刚尤猛.能拥有一把宝刀的侠客,才配称之为江湖豪杰,而宝刀, ...

  4. 关于“大数据”的15条干货思考

    文章讲的是关于"大数据"的15条干货思考,1.马云创造了"DT"(大数据时代)这个词,说未来社会不是IT时代,而是DT时代,而阿里巴巴战略定位为做DT时代的基础 ...

  5. SqlBulkCopy类进行大数据(一万条以上)插入测试

    SqlBulkCopy类进行大数据(一万条以上)插入测试 转载于:https://www.cnblogs.com/macT/p/10213882.html

  6. python大数据招聘信息_2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万!...

    原标题:2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万! 看了Boss直聘发布的<2017互联网人才趋势白皮书>,奇小酷只有一句话要说,新的一年,希望大家火的像Py ...

  7. 第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL

    第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL 文章目录 第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL 第一节 Fink SQL快速上手 1. ...

  8. 大数据丨ClickHouse在京东能源管理平台的实践

    ClickHouse是一款面向大数据场景下的OLAP数据库,相比于传统的基于Hadoop生态圈的OLAP大数据分析系统,ClickHouse具有极致的查询性能.轻量级的架构设计及维护简单等优势.目前社 ...

  9. 大数据窥探:关于大数据的15条干货思考

    马云创造了"DT"(大数据时代)这个词,说未来社会不是IT时代,而是DT时代,而阿里巴巴战略定位为做DT时代的基础设施.类似于IT时代的微软,移动互联网时代的苹果之类的意思.马云去 ...

  10. 你所不知道的大数据:一条微博得到王思聪手机号

    互联网已成为人们生活工作的重要组成部分,时时的网路连接不只带来便捷,也将我们所有数据保存到了网络空间中.然而这些越积越多的个人大数据,却为黑客入侵攻击大开方便之门.在今天举办的中国互联网安全大会(IS ...

最新文章

  1. python编码规范手册-Python官方竟然给出了一种编码规范PEP 8
  2. 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
  3. 【数据库设计-3】菜单设计
  4. 服务器与客户端连接 聊天机器人
  5. Webstorm设置开发模板
  6. 容器编排技术 -- Kubernetes kubectl create secret 命令详解
  7. [转]Spring数据库读写分离
  8. python常用排序_python中的各种排序
  9. Caffe Batch Normalization推导
  10. codeforces 984 A. Game
  11. maven的安装配置超详细教程【含nexus】
  12. 安装inotify-tools监控工具
  13. Discuz 2.0 英文版 源码分析 一
  14. 西门子S7-200SMART四种密码解密软件
  15. 抖音api开放平台对接_抖音视频API解析接口
  16. html播放m3u8格式转换,使用HTML视频标签播放m3u8文件
  17. 这些信贷数据埋点中不得不知的埋点知识
  18. Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)
  19. C语言 强符号与弱符号
  20. 数据工程指南高级技能:处理框架

热门文章

  1. 《最后的教父》小说人物一览表
  2. onvif 添加H265开发流程
  3. 买哪种计算机可以弹奏,还能酱紫玩:网友用AMD撕裂者3990X的126个框框演奏音乐...
  4. 那个小白说他还没搞懂类和对象,我一怒之下把这篇文章扔给了他
  5. You are what you read 笔记
  6. FZU 2158 数字密码
  7. 单招学计算机好学吗,单招没被录取学什么,计算机行业
  8. PageOffice实现在线编辑Word的手写批注功能
  9. (六)1609.4协议详解
  10. 使用Python程序读取fasta文件reads