这个问题虽然说难不难,但说易也不简单,而且,偏受大小厂喜欢。其实,不管是数仓/ETL/BI/数据分析/大数据等方向,都会经常被面试/笔试考察到。
1.还原场景 - 建表
select * from tmp.tmp_last_3_day;
2.解决问题关键-分析
3.SQL实现 - 见证奇迹的时刻
连续3天登录的用户id sql如下:
我们再来看下结果:
其实,方法有很多,上面只是选了一种技巧性比较强的一种。下面也是一种不错的方法,大佬们肯定还有其他实现方式,欢迎小伙伴们留言,一起讨论,一起进步 ~ go go go ...
1、行转列的用法PIVOT
CREATE table test(id int,name nvarchar(20),quarter int,number int)insert into test values(1,N'苹果',1,1000)insert into test values(1,N'苹果',2,2000)insert into test values(1,N'苹果',3,4000)insert into test values(1,N'苹果',4,5000)insert into test values(2,N'梨子',1,3000)insert into test values(2,N'梨子',2,3500)insert into test values(2,N'梨子',3,4200)insert into test values(2,N'梨子',4,5500)select * from test
结果:
select ID,NAME,[1] as '一季度',[2] as '二季度',[3] as '三季度',[4] as '四季度'fromtestpivot(sum(number)for quarter in([1],[2],[3],[4]))as pvt
结果: