欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 1999 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條評論
主站蜘蛛池模板: 精品久久网 | 免费在线观看视频a | se视频在线观看 | 亚洲视频中文字幕 | 日韩久久精品 | a级毛片高清免费视频 | 国产大毛片 | 亚洲精品播放 | 夫妻性生活交换 | 香港三级台湾三级在线播放徐 | 国产一区二区三区在线视频 | 精品亚洲一区二区三区 | 久久6国产| 欧美激情免费观看一区 | 亚洲高清在线看 | 国产成人精品在线 | 91成人午夜性a一级毛片 | 久久99精品久久 | 午夜一级毛片 | 国产人成精品一区二区三 | 最新色图| 天干夜天天夜天干天 | 精品一区二区三区在线观看视频 | 久久99国产一区二区三区 | 日韩欧美国产精品第一页不卡 | 日韩大片在线永久观看视频网站免费 | 亚洲视频在线观看 | 日韩美女中文字幕 | 五月综合激情婷婷六月色窝 | 青娱乐欧美 | 福利视频第一页 | 一级毛片视频免费 | 国产一区免费 | 国产精品久久久久无码AV1 | 亚洲黄色片在线观看 | 欧美一区二区三区不卡免费 | 国内精品小视频福利网址 | 国产高清在线精品免费 | 久久精品小视频 | 日本免费观看网站 | 成年人看的羞羞网站 |