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

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

系統 2187 0

?

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

????

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

?

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

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

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

????基礎數據準備:

?

        
          
            /*
          
          
            以下代碼執行完成只是為了講解說明,執行完成需要刷新下IntelliSence緩存,更新下當前智能提示 *鍵盤快捷鍵 Ctrl+Shift+R。 *@author 系統管理員-咔咔 *@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 
          
            --
          
          
            員工訂單統計
          
          
             ( Id 
          
          
            INT
          
          
            PRIMARY
          
          
            KEY
          
          
            IDENTITY
          
          ,
          
            --
          
          
            主鍵ID
          
          

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

  OrdersCount 
          
            INT
          
          ,            
          
            --
          
          
            訂單數量
          
          
             ) 
          
          
            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
          
          )
        
      

? 執行命令:

      
        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
    

?結果如下:

      
        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
      
       行受影響)
    

? 結論如下:?

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

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

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

???

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲视频中文字幕 | 国产女人成人精品视频 | 四虎成人精品在永久在线观看 | 在线播放色 | 国产福利不卡 | 欧美激情视频一区 | 天天视频一区二区三区 | 美女视频很黄很暴黄是免费的 | 老司机午夜精品99久久免费 | 精品免费国产一区二区三区 | 国产精品爱久久久 | 久久国产免费一区 | 高清国产精品入口麻豆 | 亚洲国产香蕉视频欧美 | 97久久国产一区二区三区四区 | 亚洲一区二区三区福利在线 | 五月天婷婷在线视频 | 色哦色哦哦色天天综合 | 在线视频 中文字幕 | 免费的爱爱视频 | 综合久久久 | 国产免费无遮挡精品视频 | 婷婷色中文网 | 日韩 欧美 亚洲 国产 | 亚洲无总热门 | 999精品视频这里只有精品 | 免费观看a毛片一区二区不卡 | 色女人综合 | 奇米1111| 高清国产一级毛片国语 | 全黄冷激性性视频 | 国产网红主播 | 精品欧美一区二区三区在线 | 国产成人在线视频 | 成人精品一区二区www | 精品无码久久久久国产 | 2019偷偷狠狠的日日 | 香蕉视频18| 国产高清视频免费 | 久久成人免费观看草草影院 | 亚洲国产成人久久精品hezyo |