老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

怎么從LeetCode的題目再看MySQLExplain

這篇文章主要講解了“怎么從LeetCode的題目再看MySQL Explain”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么從LeetCode的題目再看MySQL Explain”吧!

創(chuàng)新互聯(lián)主要從事做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)雨花臺(tái),十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

題目

題目描述:編寫一個(gè) SQL 查詢,查找所有至少連續(xù)出現(xiàn)三次的數(shù)字。并且給了一個(gè)示例,阿粉按照題目給的示例在本地創(chuàng)建了 Logs  表和插入相應(yīng)的數(shù)據(jù),如下:

怎么從LeetCode的題目再看MySQL Explain

我們可以看到在給定上面的 Logs 表中, 1 是唯一連續(xù)出現(xiàn)至少三次的數(shù)字,所以最后輸出的結(jié)果是 1。

原始題目:LeetCode 180

剛看到題目的時(shí)候,阿粉一瞬間還是沒反應(yīng)過來,不知道該如何著手進(jìn)行,思索了一下考慮是否可以用自連接來實(shí)現(xiàn)呢?然后根據(jù)題目的意思就寫出了如下的  SQL。

SELECT DISTINCT  l1.num  FROM  `Logs` l1,  `Logs` l2,  `Logs` l3  WHERE  l1.num = l2.num   AND l2.num = l3.num   AND l1.id = l2.id - 1   AND l2.id = l3.id - 1

寫完過后阿粉第一次提交,提示下面錯(cuò)誤,可以看到是最后沒有將返回重命名,調(diào)整了一下 SQL,就l1.num 改成l1.num as  ConsecutiveNums 再次提交,得到的第二張通過的圖。

怎么從LeetCode的題目再看MySQL Explain

怎么從LeetCode的題目再看MySQL Explain

看開始看到通過,阿粉還在想這道題也沒什么啊,還是 so easy 的嘛。但是突然阿粉轉(zhuǎn)念一想,這個(gè)題目說的是連續(xù)出現(xiàn),并沒有說 ID 是連續(xù)的啊,如果  ID 不連續(xù)的話,這種就不對(duì)了,還有就是如果需要連續(xù) 4 次出現(xiàn)的,5 次出現(xiàn)的數(shù)字呢?總不能一直自連接下去吧。如果寫成這樣那整個(gè) SQL  就太不靈活了。

隨后阿粉就看了一下官方解答以及相關(guān)評(píng)論,果不其然雖然官方給出的解答跟阿粉的一致,但是下面的評(píng)論卻有很多小伙伴都在說這個(gè) ID 不連續(xù)的問題。

怎么從LeetCode的題目再看MySQL Explain

怎么從LeetCode的題目再看MySQL Explain

既然反饋這種做法有問題,那自然就會(huì)有好事之者會(huì)想到解決辦法,果然評(píng)論區(qū)的一個(gè)大佬給出了下面的這種解法

怎么從LeetCode的題目再看MySQL Explain

剛看到這個(gè)解法的時(shí)候,阿粉一下子沒有看懂,把這個(gè)代碼進(jìn)行了提交,果然也是正常的通過了。而且這種解法不會(huì)被出現(xiàn)幾次的條件給限制。抱著學(xué)習(xí)的心態(tài),阿粉準(zhǔn)備研究一下這條  SQL 里面的內(nèi)容。

SQL 拆解

首先這條 SQL 里面有這么幾個(gè)地方讓阿粉迷惑,第一個(gè)是@ 符號(hào),然后是:= 然后還有個(gè) case when then 語法,平日里在 CRUD  的時(shí)候沒遇到過這種寫法,不過不知道沒關(guān)系,Google 一下就好了。網(wǎng)上查了下,@prev 表示的是聲明變量,:=操作是 MySQL 的賦值操作,case  when then when 后面接的是判斷條件,條件成立則會(huì)返回then 后面的結(jié)果,需要注意的是 case  只會(huì)返回第一個(gè)符合條件的結(jié)果,剩下將會(huì)被忽略。

簡(jiǎn)單的了解了上面幾個(gè)知識(shí)點(diǎn)過后,我們就可以對(duì)下面這條 SQL 進(jìn)行拆解了。

select distinct Num as ConsecutiveNums from (   select Num,      case        when @currnet = Num then @count := @count + 1       when (@currnet := Num) is not null then @count := 1     end as CNT   from Logs, (select @currnet := null,@count := 0) as t ) as temp where temp.CNT >= 3
  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 最外層的 select distinct Num as ConsecutiveNums from () as temp where temp.CNT  >= 3 ; 我們可以看到中間的小括號(hào)里面被派生成了一個(gè)臨時(shí)表,表名叫做 temp,并且 temp 表中有兩個(gè)字段分別是Num,CNT。其實(shí)Num  則是表Logs 里面的數(shù)字,CNT 則是連續(xù)出現(xiàn)的累積次數(shù),最后的where temp.CNT >= 3 則是在根據(jù)要求連續(xù)出現(xiàn)的次數(shù)進(jìn)行查詢。

  3. 派生語句SELECT Num,CASE WHEN @currnet=Num THEN @count:=@count+1 WHEN  (@currnet:=Num) IS NOT NULL THEN @count:=1 END AS CNT FROM LOGS,(SELECT  @currnet:=NULL,@count:=NULL) AS t 包含兩個(gè)部分,一個(gè)是Select 中的case when then 另一個(gè)是from 中的  (select @currnet:= null,@count := null) as t 其中select @currnet:= null,@count :=  null 也是一個(gè)派生表,這里通過聲明兩個(gè)變量@currnet, @count 并賦值為null 。

  4. 中間派生的表 temp 的內(nèi)容如下,通過生成記錄每個(gè)數(shù)字出現(xiàn)的次數(shù)的臨時(shí)表來查詢數(shù)據(jù)。

怎么從LeetCode的題目再看MySQL Explain

下面我們通過explain 命令看下整個(gè) SQL 的執(zhí)行過程,:

怎么從LeetCode的題目再看MySQL Explain

  • 從select_type中我們可以看到總共派生了兩個(gè)表,跟我們上面分析的一致;

  • ID 為 3 的派生表的內(nèi)容是select @current := null,@count := 0 定義兩個(gè)變量并賦值,并且 id  越大越先執(zhí)行;

  • case 語句中第一個(gè)when 中判斷當(dāng)前掃描到的 num 值與定義的變量是否一致,如果一致則 count 加一,不一致則進(jìn)行下一個(gè)when  條件判斷,并將count 賦值為 1 返回;

  • 經(jīng)過全表掃描過后,就得到了上面的中間表 temp 的內(nèi)容;

不得不說,上面的方案是很完美的,不存在 ID 是否連續(xù)的問題,也不會(huì)多層自連接,而且也可以根據(jù)要求找出連續(xù)出現(xiàn)的次數(shù),相對(duì)靈活。剛開始看到這個(gè) SQL  的時(shí)候,阿粉并不清楚整個(gè)執(zhí)行的過程,然后通過 explain 才漸漸明白整個(gè)執(zhí)行過程, 而且對(duì)于在 SQL 中使用變量也有了一定的了解。

感謝各位的閱讀,以上就是“怎么從LeetCode的題目再看MySQL Explain”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么從LeetCode的題目再看MySQL Explain這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


本文名稱:怎么從LeetCode的題目再看MySQLExplain
文章地址:http://www.xueling.net.cn/article/gisesc.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 加勒比HEZYO黑人专区 | 国产精品久久久久7777婷婷 | 东京热T0KY0综合久久 | 亚洲一区二区在线观 | 久久久久成人精品无码 | 任你操精品视频 | 免费看欧美成人A片无码 | 亚洲欧美日韩系列中文字幕 | 亚洲国产日韩一区二区三区 | 免费一级黄色大片 | 国产精品久久久久久久久久黑人 | 精品欧美国产一区二区三区不卡 | AV天堂久久天堂色综合 | 毛片免费小视频 | 精品无码免费专区毛片 | 狠狠亚洲婷婷综合色香五月排名 | 在线观看视频91 | 免费a级毛片在线播放 | 国内一区二区三区 | 久久99999 | 亚洲一区精品视频在线观看 | a一级黄 | 无码精品AV久久久奶水小说 | 亚洲优女在线 | va欧美 | 五月婷六月婷婷俺也去 | 亚洲精品成人片在线观看精品字幕 | 两个男人吮她的花蒂和奶水视频 | 婷停五月深爱五月 | 99re6.在线观看免费视频 | 青青草视频在线免费播放 | 欧州精品 | 中文字幕乱伦视频 | 久久久国产精品视频 | 91大神在线观看视频 | 日韩伦理中文字幕 | 女人高潮av国产伦理剧 | 亚洲中文字幕无码MV | 最近日本中文字幕免费完整 | 色一情一区二区三区四区 | 久久精品性 |