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

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

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

    Change Dir

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

    統(tǒng)計(jì)

    留言簿(18)

    積分與排名

    “牛”們的博客

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

    我的鏈接

    淘寶技術(shù)

    閱讀排行榜

    評(píng)論排行榜

    Leetcode-Database-180-Consecutive Numbers-Medium

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

     

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

     

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

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

    評(píng)論

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

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

    主站蜘蛛池模板: 成人免费无毒在线观看网站| 亚洲乱码中文字幕手机在线| 蜜臀亚洲AV无码精品国产午夜.| 亚洲精品国产精品国自产观看| 视频免费在线观看| 亚洲国产精品白丝在线观看| 国产国产人免费视频成69大陆| 中国内地毛片免费高清| 亚洲人成人77777网站不卡| 亚洲成aⅴ人片久青草影院| 84pao国产成视频免费播放| 亚洲AV无码专区在线电影成人| 国产亚洲一区二区精品| 成人在线视频免费| 97人妻精品全国免费视频| 日韩亚洲产在线观看| 亚洲人成人无码网www电影首页 | 在线观看亚洲免费| 亚洲AV中文无码乱人伦下载| 成人免费视频国产| 99热在线精品免费播放6| 看成年女人免费午夜视频| 亚洲精品白色在线发布| 亚洲真人日本在线| 大学生高清一级毛片免费| 免费人成网站在线观看不卡| 国产精品亚洲专区在线播放| 亚洲卡一卡二卡乱码新区| 久久久久亚洲AV成人无码网站 | 久久国内免费视频| 大地资源中文在线观看免费版| 亚洲aⅴ无码专区在线观看| 亚洲综合日韩中文字幕v在线| 亚洲一区日韩高清中文字幕亚洲| 久久精品免费一区二区喷潮| 国产精品视频白浆免费视频| 一级毛片大全免费播放下载| 精品亚洲av无码一区二区柚蜜| 亚洲欧洲精品在线| 亚洲视频在线播放| 亚洲高清国产拍精品26U|