亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQLServer針對排名函數(shù)ROWNUMBER()、RANK()、DE

系統(tǒng) 1919 0

?

??? ?相信大家在軟件工程中經(jīng)常會遇到對某些數(shù)據(jù)進(jìn)行排名的問題,尤其是對于電子商務(wù)的HR來說“大手筆”是非常具有潛在價值的!~至于都有哪些價值這個超出本文的范疇不予進(jìn)行說明,但是不得不說的是每一個精明的HR以下類似的需求:

????

  • 我需要系統(tǒng)告訴我,截止到目前為止,近幾個月內(nèi)銷售人員的訂單交易數(shù)量排名、獎金排名(對內(nèi)部員工員工)
  • 我需要系統(tǒng)告訴我,截止到目前為止,商品熱度的排名、購買力度的排名、充值力度的排名、提款力度的排名,相關(guān)地區(qū)的的排名(對客戶)

?

??? ?對于SQL新人來說,第一個想到的函數(shù) TOP 配合 ROW_NUMBER() ORDER BY ,如果你用了這3個配合,那么恭喜你, You're?Wrong!?

?????因為上述的情況,可能會發(fā)生相同數(shù)據(jù)的排名,那么一旦排名的數(shù)據(jù)發(fā)生相同,因為 ROWNUMBER() 類似于 IDENTITY (起始1,自增1)所以對排名的準(zhǔn)確性就不那么明確了。??

??? 下面來看具體的例子:

????基礎(chǔ)數(shù)據(jù)準(zhǔn)備:

?

        
          
            /*
          
          
            以下代碼執(zhí)行完成只是為了講解說明,執(zhí)行完成需要刷新下IntelliSence緩存,更新下當(dāng)前智能提示 *鍵盤快捷鍵 Ctrl+Shift+R。 *@author 系統(tǒng)管理員-咔咔 *@time 2013-11-25 
          
          
            */
          
          
            USE
          
          
             MyDB; 
          
          
            IF
          
          
            EXISTS
          
           (
          
            Select
          
          
            *
          
          
            From
          
           sys.objects 
          
            Where
          
           name 
          
            =
          
          N
          
            '
          
          
            EmployeOrdersCount
          
          
            '
          
          
            And
          
           Type 
          
            In
          
           (
          
            '
          
          
            S
          
          
            '
          
          ,
          
            '
          
          
            U
          
          
            '
          
          
            )) 
          
          
            DROP
          
          
            TABLE
          
          
             EmployeOrdersCount 
          
          
            ELSE
          
          
            CREATE
          
          
            TABLE
          
           EmployeOrdersCount 
          
            --
          
          
            員工訂單統(tǒng)計
          
          
             ( Id 
          
          
            INT
          
          
            PRIMARY
          
          
            KEY
          
          
            IDENTITY
          
          ,
          
            --
          
          
            主鍵ID
          
          

  EmployeNO 
          
            NVARCHAR
          
          (
          
            15
          
          ),     
          
            --
          
          
            員工編號
          
          

  OrdersCount 
          
            INT
          
          ,            
          
            --
          
          
            訂單數(shù)量
          
          
             ) 
          
          
            INSERT
          
          
            INTO
          
          
             EmployeOrdersCount(EmployeNO,OrdersCount) 
          
          
            VALUES
          
          (
          
            '
          
          
            100
          
          
            '
          
          ,
          
            100
          
          ),(
          
            '
          
          
            102
          
          
            '
          
          ,
          
            100
          
          ),(
          
            '
          
          
            103
          
          
            '
          
          ,
          
            100
          
          ),(
          
            '
          
          
            104
          
          
            '
          
          ,
          
            100
          
          
            ), (
          
          
            '
          
          
            105
          
          
            '
          
          ,
          
            100
          
          ),(
          
            '
          
          
            106
          
          
            '
          
          ,
          
            99
          
          ),(
          
            '
          
          
            107
          
          
            '
          
          ,
          
            99
          
          ),(
          
            '
          
          
            108
          
          
            '
          
          ,
          
            99
          
          ),(
          
            '
          
          
            109
          
          
            '
          
          ,
          
            98
          
          
            ), (
          
          
            '
          
          
            110
          
          
            '
          
          ,
          
            98
          
          ),(
          
            '
          
          
            111
          
          
            '
          
          ,
          
            97
          
          ),(
          
            '
          
          
            112
          
          
            '
          
          ,
          
            96
          
          ),(
          
            '
          
          
            113
          
          
            '
          
          ,
          
            100
          
          )
        
      

? 執(zhí)行命令:

      
        SELECT
      
       ROW_NUMBER() 
      
        OVER
      
      (
      
        ORDER
      
      
        BY
      
       OrdersCount 
      
        desc
      
      ) 
      
        AS
      
      
        '
      
      
        RowNumber
      
      
        '
      
      
        ,

     RANK() 
      
      
        OVER
      
      (
      
        ORDER
      
      
        BY
      
       OrdersCount 
      
        desc
      
      ) 
      
        AS
      
      
        '
      
      
        Rank
      
      
        '
      
      
        ,

     DENSE_RANK() 
      
      
        OVER
      
      (
      
        ORDER
      
      
        BY
      
       OrdersCount 
      
        desc
      
      ) 
      
        AS
      
      
        '
      
      
        Dense_rank
      
      
        '
      
      
        ,

     NTILE(
      
      
        4
      
      ) 
      
        OVER
      
      (
      
        ORDER
      
      
        BY
      
       OrdersCount 
      
        desc
      
      ) 
      
        AS
      
      
        '
      
      
        ntile
      
      
        '
      
      
        

        ,EmployeNO, OrdersCount

      
      
      
        FROM
      
       EmployeOrdersCount
    

?結(jié)果如下:

      
        RowNumber            Rank                 Dense_rank           ntile                EmployeNO       OrdersCount


      
      
        --
      
      
        ------------------ -------------------- -------------------- -------------------- --------------- -----------
      
      
        1
      
      
        1
      
      
        1
      
      
        1
      
      
        100
      
      
        100
      
      
        2
      
      
        1
      
      
        1
      
      
        1
      
      
        102
      
      
        100
      
      
        3
      
      
        1
      
      
        1
      
      
        1
      
      
        103
      
      
        100
      
      
        4
      
      
        1
      
      
        1
      
      
        1
      
      
        104
      
      
        100
      
      
        5
      
      
        1
      
      
        1
      
      
        2
      
      
        105
      
      
        100
      
      
        6
      
      
        1
      
      
        1
      
      
        2
      
      
        113
      
      
        100
      
      
        7
      
      
        7
      
      
        2
      
      
        2
      
      
        106
      
      
        99
      
      
        8
      
      
        7
      
      
        2
      
      
        3
      
      
        107
      
      
        99
      
      
        9
      
      
        7
      
      
        2
      
      
        3
      
      
        108
      
      
        99
      
      
        10
      
      
        10
      
      
        3
      
      
        3
      
      
        109
      
      
        98
      
      
        11
      
      
        10
      
      
        3
      
      
        4
      
      
        110
      
      
        98
      
      
        12
      
      
        12
      
      
        4
      
      
        4
      
      
        111
      
      
        97
      
      
        13
      
      
        13
      
      
        5
      
      
        4
      
      
        112
      
      
        96
      
      
        



(
      
      
        13
      
       行受影響)
    

? 結(jié)論如下:?

      
        
          ROWNUMBER():
        
        不關(guān)心行具有相同的值的問題,持續(xù)遞增,類似于
        
          IDENTITY
        
          RANK():
        
        允許行具有相同的值的時候相同的排名,在遇到不同的值得時候重新進(jìn)行
        
          ROWNUMBER()
        
        排名。

         
        
           例如N個相同的值排名為1, 那么在N
        
      
      
        +1的時候排名采用
        
          ROWNUMBER()
        
        的值也就是N+
        
          1
        
      
      
        
          . 
        
        
          DENSE_RANK():
        
        允許行具有相同的時候相同的排名,在遇到不同的值得時候采用上次的排名進(jìn)行
      
      +
      
        1處理。 

         
        
          例如N個相同的值排名為1,那么在N
        
      
      
        +1的時候排名 采用上次的排名值也就是N+
        
          1
        
      
      
        
          . 
        
        
          NTILE(X)
        
        :這個函數(shù)可以說很少使用。幾乎是個廢柴,看上面的代碼就明白了。
      
    

???

SQLServer針對排名函數(shù)ROWNUMBER()、RANK()、DENSE_RANK()、NTILE的研究!~


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕精品1在线 | 桃色视频在线观看 | 日本sese | 久久er99热精品一区二区 | 国产三级在线精品男人的天堂 | 久久久久久久久66精品片 | 尹人成人网 | www.五月天激情 | 欧美性爰视频 | 国产色视频一区 | 999视频在线播放777 | 久久这里只有精品视频99 | 精品综合久久久久久99 | 特黄女一级毛片 | 色视频久久 | 高清成人 | 日韩视频中文字幕 | 欧美色黄视频 | 色综合中文| 99精品视频在线在线视频观看 | 国内精品久久久久久久999下 | 久草免费色站 | 高清视频 一区二区三区四区 | 亚洲综合日韩精品欧美综合区 | 国产精品久久久久久亚洲伦理 | 色鬼久久爱综合久久鬼色 | 日日噜噜夜夜狠视频免费 | 日日干日日操日日射 | 欧美成人在线视频 | 99热欧美| 久久精品国产国产精品四凭 | 国产日本亚洲欧美 | 欧美性xxxx另类 | 精品96在线观看影院 | 久久精品国产三级不卡 | 久久国产精品自由自在 | 欧美开嫩苞实拍视频在线观看 | 国产香蕉91tv永久在线 | 四虎免费看黄 | 欧美日韩国产超高清免费看片 | 日韩美a一级毛片 |