力扣SQL 601題技巧備忘
2023-06-18 17:52 作者:AutoSketch_Vray | 我要投稿

此類題在實際業(yè)務(計算用戶留存率指標之類的)中較為常見,也比較經(jīng)典,但通過率不到50%,官方題解蠻離譜使勁join,有人寫笛卡爾積來解(大數(shù)據(jù)怕不是直接把服務器干冒煙)
本人SQL很久很久沒打了,最近又撿起來,實話說能力只能說是地板級,代碼見笑
以下是題目

核心思想
一般這類求連續(xù)的題目都需要構造出等差數(shù)列才好做,當然你分類做也行,只是沒那么好做
舉個例子:

找連續(xù)就要構造等差序列,那么可以這樣構造(業(yè)務上這么構造不太好):

上圖可以看出來,如果c列日期連續(xù)的話,日期差值是相等的,即9-10連續(xù)兩天,12-13連續(xù)三天,16獨一天,以此類推。
回到本題
1.先篩選出人數(shù)大于等于100的行,再作等差

2.做差找連續(xù)(實際1、2步可以寫一起,分開寫容易看效果)

3.數(shù)做差的數(shù)字出現(xiàn)幾次相同(注意差值只會連續(xù)出現(xiàn),不會后面再次出現(xiàn))
直接開窗造他就完了

4.再直接where一下就出來了,力扣本題要求按順序就再order by一下就完事了

效率嘛……
如果關鍵字全大寫還能提升一點點效率,也就一絲絲

結尾推薦
https://mystery.knightlab.com/?
一個練sql的小游戲,用sql語句查表找出兇手,幼兒園級的難度,就是表較為多,建議搞個思維導圖