<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)論   

    主站蜘蛛池模板: 亚洲国产精品久久久久秋霞小| 成人人观看的免费毛片| 真人无码作爱免费视频| 日韩在线不卡免费视频一区| 久久久久久久久无码精品亚洲日韩| 亚洲激情视频网站| 永久亚洲成a人片777777| 国产精品嫩草影院免费| 日韩av无码成人无码免费| 在线观看亚洲专区| 亚洲黄页网在线观看| 亚洲第一精品在线视频| 色妞WWW精品免费视频| 99久热只有精品视频免费观看17| 成人无码视频97免费| 一级片在线免费看| 美女裸免费观看网站| 亚洲AV第一成肉网| 亚洲乱码av中文一区二区| 亚洲三级在线观看| 亚洲国产精品人久久电影| 久久精品国产精品亚洲人人| 波多野结衣一区二区免费视频| 日韩中文无码有码免费视频 | 色se01短视频永久免费| 日韩视频免费在线观看| 日韩成人免费视频| 久久青草精品38国产免费| 久久久久久影院久久久久免费精品国产小说 | 亚洲AⅤ男人的天堂在线观看| 亚洲1区1区3区4区产品乱码芒果 | 久久久久国产精品免费看| 久久久久久久99精品免费| 久久99精品国产免费观看| 无码人妻丰满熟妇区免费| 久久国产色AV免费看| 亚洲成人免费网址| 无码国产精品一区二区免费I6| 成年女人免费v片| 日本免费电影一区| 亚洲AV无码成H人在线观看|