博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL经典题目总结
阅读量:2160 次
发布时间:2019-05-01

本文共 1689 字,大约阅读时间需要 5 分钟。

1、求用户连续登录最大天数

step1 构造伪列,对每个用户的日期排序得到字段rn(假设每个用户每日只有一条记录),再用当前日期减去rn得到新的date_tmp,若客户连续登录,那么将有若干个相同的date_tmp;

step2 基于上一步结果,统计每个用户每种date_tmp下的数量,然后在对客户id groupby 计算每个客户的最大连续登录天数

--step1 构造伪列,对每个用户的日期排序得到字段rn(假设每个用户每日只有一条记录),再用当前日期减去rn得到新的date_tmp,若客户连续登录,那么将有若干个相同的date_tmpcreate table tmp_table stored as parquet as select 	tmp.id,	tmp.date,	data_sub(tmp.date,tmp.rn) as date_tmp	from 	(		select 			id,			date,			row_number() over(partition by id order by data) rn 		from dm.table	)tmp --step2 基于上一步结果,统计每个用户每种date_tmp下的数量,然后在对客户id  groupby 计算每个客户的最大连续登录天数	select		id,		max(date_cnt) as cnt	from 	(		select			id,			date_tmp,			count(1) as date_cnt		from tmp_table		group by id,date_tmp	)t	group by id

2、求连续点击三次的用户数,中间不能有别人的点击 ,最大连续天数的变形问题

3、计算除去部门最高工资,和最低工资的平均工资

分别按升序和降序排出部门的最大和最小薪资,将二者筛选后剔除,在计算均值

--emp 表	--id 员工 id ,deptno 部门编号,salary 工资		select 		deptno,avg(salary)	from 	(			select 			id,			deptno,			salary,			rank() over(partition by deptno  order by salary asc) as rank_low,					rank() over(partition by deptno  order by salary desc) as rank_high		from table	)tmp 	where tmp.rank_low>1 and rank_high>1	group by deptno

4、留存率计算

--假设每个客户每天只登录一次--step 1 自联结  step 2 按日期group by得到每天的1、3、7日留存率select 	tmp.load_tm_a,	count(if(diff_days = 1,id,null)) as '次日留存人数',	count(if(diff_days = 1,id,null))/count(id) as '次日留存人数',	count(if(diff_days = 3,id,null)) as '3日留存人数',	count(if(diff_days = 3,id,null))/count(id) as '3日留存人数',		count(if(diff_days = 7,id,null)) as '7日留存人数',	count(if(diff_days = 7,id,null))/count(id) as '7日留存人数',			from (	select 		id,		load_tm_a,		load_tm_b,		DATEDIFF(day,'load_tm_b','load_tm_a') as diff_days			from table 	left join table	on a.id = b.id)tmpgroup by load_tm_a

转载地址:http://lwwzb.baihongyu.com/

你可能感兴趣的文章
走进JavaWeb技术世界11:单元测试框架Junit
查看>>
走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
查看>>
走进JavaWeb技术世界13:Hibernate入门经典与注解式开发
查看>>
走进JavaWeb技术世界14:Mybatis入门
查看>>
走进JavaWeb技术世界16:极简配置的SpringBoot
查看>>
初探Java设计模式1:创建型模式(工厂,单例等)
查看>>
初探Java设计模式2:结构型模式(代理模式,适配器模式等)
查看>>
初探Java设计模式3:行为型模式(策略,观察者等)
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>