這個問題雖然說難不難,但說易也不簡單,而且,偏受大小廠喜歡。其實,不管是數倉/ETL/BI/數據分析/大數據等方向,都會經常被面試/筆試考察到。
1.還原場景 - 建表
select * from tmp.tmp_last_3_day?
image
image
2.解決問題關鍵-分析
image.gif
3.SQL實現 - 見證奇跡的時刻
連續3天登錄的用戶id -- sql如下:
image.gif
我們再來看下結果:
image
其實,方法有很多,上面只是選了一種技巧性比較強的一種。下面也是一種不錯的方法,大佬們肯定還有其他實現方式,歡迎小伙伴們留言,一起討論,一起進步 ~ go go go ...
image
image.png
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
結果:
image
select ID,NAME,[1] as '一季度',[2] as '二季度',[3] as '三季度',[4] as '四季度'fromtestpivot(sum(number)for quarter in([1],[2],[3],[4]))as pvt
結果:
image