<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛(ài)生活是一切藝術(shù)的開(kāi)始

    統(tǒng)計(jì)

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個(gè)公司技術(shù)

    我的鏈接

    淘寶技術(shù)

    閱讀排行榜

    評(píng)論排行榜

    Leetcode-Database-180-Consecutive Numbers-Medium

    題目地址:https://oj.leetcode.com/problems/consecutive-numbers/

     

    這個(gè)題目是要求寫(xiě)一個(gè)sql,查詢(xún)出表中連續(xù)出現(xiàn)三次的記錄。表結(jié)構(gòu)非常簡(jiǎn)單如下:

    +----+-----+
    | Id | Num |
    +----+-----+
    | 1  |  1  |
    | 2  |  1  |
    | 3  |  1  |
    | 4  |  2  |
    | 5  |  1  |
    | 6  |  2  |
    | 7  |  2  |
    +----+-----+

     

     

    這個(gè)Logs表里,只有IdNum字段,而題目就是要找出連續(xù)出現(xiàn)3次的Num,對(duì)于這個(gè)表,答案就是1了。

    思路很直觀暴力的一個(gè)想法就是Logs表自己關(guān)聯(lián)3次,關(guān)聯(lián)條件依次是Id+1,這樣就可以把連續(xù)記錄關(guān)聯(lián)出來(lái)了

    我的代碼如下:

    select
    distinct o1.Num
    from(
    select * from Logs
    )o1
    join(
    select * from Logs
    )o2
    on(o1.Num=o2.Num and o1.Id=o2.Id+1)
    join(
    select * from Logs
    )o3
    on(o2.Num=o3.Num and o2.Id=o3.Id+1)

     

    這個(gè)題目雖然可以這樣解掉,但是很自然的會(huì)聯(lián)想,如果3變成n呢,題目變?yōu)榍筮B續(xù)出現(xiàn)n次的記錄,那該如何解?顯然暴力解法是不可行的。鑒于能力有限,我從discuss區(qū)找到了一個(gè)很贊的解法,通過(guò)定義變量,很巧妙的解了這個(gè)擴(kuò)展的問(wèn)題,原作者kent-huang

    代碼如下:

    select DISTINCT num 
    FROM (
      select 
        num, 
        case when @record = num then @count:=@count+1 
             when @record <> @record:=num then @count:=1 
        end as n 
      from Logs ,(
        select 
           @count:=0,
           @record:=(SELECT num from Logs limit 0,1)
      ) r 
    ) a 
    where a.n>=3

     

    簡(jiǎn)單分析一下,作者通過(guò)定義兩個(gè)變量recordcount來(lái)控制記錄和對(duì)應(yīng)的rank值,首先通過(guò)一個(gè)select @count:=0,@record:=(SELECT num from Logs limit 0,1)語(yǔ)句來(lái)初始化這兩個(gè)變量count=0record=表里第一條記錄的num。接下來(lái)通過(guò)普通查詢(xún),將Logs表里每一條記錄查出來(lái),和record對(duì)比,如果相同,則count自增1,如果不同,那么新的record被賦值,同時(shí)count1,很漂亮的自定義變量用sql實(shí)現(xiàn)了我們直覺(jué)上需要用邏輯代碼來(lái)完成的功能。而且這個(gè)代碼的一大優(yōu)勢(shì)是不需要用到Id字段~~非常棒

     

    還有好的思路,請(qǐng)一定分享給我~~:)

    posted on 2015-01-29 19:01 changedi 閱讀(3984) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 數(shù)據(jù)

    評(píng)論

    # re: Leetcode-Database-180-Consecutive Numbers-Medium 2015-01-29 21:39 京山游俠

    mark。
    博主的頁(yè)面打開(kāi)太慢了。  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 中国xxxxx高清免费看视频| 亚洲日韩乱码久久久久久| 黄色网址免费在线| 日韩高清在线高清免费| 亚洲日韩精品无码专区加勒比| 67pao强力打造国产免费| 91天堂素人精品系列全集亚洲| 在线成人精品国产区免费| 亚洲av永久无码精品古装片| 香港a毛片免费观看| 亚洲男女一区二区三区| 国产啪精品视频网免费| 亚洲爆乳AAA无码专区| 亚洲成a人片在线观看国产| 91av免费在线视频| 亚洲视频在线视频| 国产福利在线观看免费第一福利| 亚洲一区在线视频| 免费国产小视频在线观看| 中文字幕成人免费高清在线| 亚洲毛片在线观看| 免费看美女被靠到爽的视频| 成人免费观看男女羞羞视频| 国精无码欧精品亚洲一区| 国产精品久久永久免费| 国产亚洲女在线线精品| 亚洲国产美女精品久久久久∴| 亚洲人成免费网站| 菠萝菠萝蜜在线免费视频| 亚洲AV无一区二区三区久久| 思思re热免费精品视频66 | 成人无遮挡裸免费视频在线观看 | 日本人的色道www免费一区| 黄色网址免费在线观看| 亚洲视频精品在线观看| 日本一道在线日本一道高清不卡免费| 国产精品偷伦视频免费观看了| 亚洲成人免费网站| 亚洲乱码中文字幕综合234| 国产精品爱啪在线线免费观看| 亚洲AV无码一区二区乱子仑|