<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SQL中的排名問(wèn)題

          共 854字,需瀏覽 2分鐘

           ·

          2021-11-09 14:23

          點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)”,

          設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨

          SQL專(zhuān)欄

          SQL基礎(chǔ)知識(shí)第二版
          SQL高級(jí)知識(shí)第二版


          今天給大家介紹一下SQL Server排名中經(jīng)常用到的ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()這四個(gè)好兄弟。


          我們先創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)表Scores

          WITH t AS
          (SELECT 1 StuID,70 Score
          UNION ALL
          SELECT 2,85
          UNION ALL
          SELECT 3,85
          UNION ALL
          SELECT 4,80
          UNION ALL
          SELECT 5,74
          )
          SELECT * INTO Scores FROM t;
          SELECT * FROM Scores

          結(jié)果如下:


          1、ROW_NUMBER()

          定義:ROW_NUMBER()函數(shù)作用就是將SELECT查詢(xún)到的數(shù)據(jù)進(jìn)行排序,每一條數(shù)據(jù)加一個(gè)序號(hào),他不能用做于學(xué)生成績(jī)的排名,一般多用于分頁(yè)查詢(xún),比如查詢(xún)前10個(gè) 查詢(xún)10-100個(gè)學(xué)生。?


          1.1 對(duì)學(xué)生成績(jī)排序

          示例

          SELECT
          ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK],*
          FROM Scores;

          (提示:可以左右滑動(dòng)代碼)

          結(jié)果如下:

          這里RANK就是每個(gè)學(xué)生的排名后的次序, 根據(jù)Score進(jìn)行DESC倒序?


          1.2 獲取第2名的成績(jī)信息?

          SELECT * FROM (
          SELECT ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK],*
          FROM Scores
          ) t WHERE t.RANK=2;

          結(jié)果:

          這里用到的思想就是 分頁(yè)查詢(xún)的思想 在原sql外再套一層SELECT
          WHERE t.RANK>=1 AND t.RANK<=3 是不是就是獲取前三名學(xué)生的成績(jī)信息了。


          2、RANK()?

          定義:RANK()函數(shù),顧名思義排名函數(shù),可以對(duì)某一個(gè)字段進(jìn)行排名,這里和ROW_NUMBER()有什么不一樣呢?ROW_NUMBER()是排序,當(dāng)存在相同成績(jī)的學(xué)生時(shí),ROW_NUMBER()會(huì)依次進(jìn)行排序,他們序號(hào)不相同,而Rank()則不一樣。如果出現(xiàn)相同的,他們的排名是一樣的。下面看例子:


          示例

          SELECT ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK],*
          FROM Scores;

          SELECT RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
          FROM Scores;

          結(jié)果:

          上面是ROW_NUMBER()函數(shù)的結(jié)果,下面是RANK()函數(shù)的結(jié)果。

          當(dāng)出現(xiàn)兩個(gè)學(xué)生成績(jī)相同是里面出現(xiàn)變化。RANK()是1-1-3-4-5,而ROW_NUMBER()則還是1-2-3-4-5,這就是RANK()和ROW_NUMBER()的區(qū)別了


          3、DENSE_RANK()?

          定義:DENSE_RANK()函數(shù)也是排名函數(shù),和RANK()功能相似,也是對(duì)字段進(jìn)行排名,那它和RANK()到底有什么不同那?特別是對(duì)于有成績(jī)相同的情況,DENSE_RANK()排名是連續(xù)的,RANK()是跳躍的排名,一般情況下用的排名函數(shù)就是RANK() 我們看例子:


          示例

          SELECT
          RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
          FROM Scores;

          SELECT
          DENSE_RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
          FROM Scores;

          結(jié)果:

          上面是RANK()的結(jié)果,下面是DENSE_RANK()的結(jié)果


          4、NTILE()

          定義:NTILE()函數(shù)是將有序分區(qū)中的行分發(fā)到指定數(shù)目的組中,各個(gè)組有編號(hào),編號(hào)從1開(kāi)始,就像我們說(shuō)的'分區(qū)'一樣 ,分為幾個(gè)區(qū),一個(gè)區(qū)會(huì)有多少個(gè)。??

          SELECT NTILE(1) OVER (ORDER BY SCORE DESC) AS [RANK],* FROM Scores;

          SELECT NTILE(2) OVER (ORDER BY SCORE DESC) AS [RANK],* FROM Scores;

          SELECT NTILE(3) OVER (ORDER BY SCORE DESC) AS [RANK],* FROM Scores;

          結(jié)果:

          就是將查詢(xún)出來(lái)的記錄根據(jù)NTILE函數(shù)里的參數(shù)進(jìn)行平分分區(qū)。

          這幾兄弟就介紹完了,有空再給大家介紹分組排名的問(wèn)題。


          最后給大家分享我寫(xiě)的SQL兩件套:《SQL基礎(chǔ)知識(shí)第二版》《SQL高級(jí)知識(shí)第二版》的PDF電子版。里面有各個(gè)語(yǔ)法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來(lái)實(shí)操。


          有需要的讀者可以下載學(xué)習(xí),在下面的公眾號(hào)「數(shù)據(jù)前線」(非本號(hào))后臺(tái)回復(fù)關(guān)鍵字:SQL,就行

          數(shù)據(jù)前線


          后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

          后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群


          推薦閱讀

          瀏覽 38
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月天成人性爱 | 蜜桃网站视频 | 一级黄色小视频 | 国精产品一区一区三区有限是什么 | 精品天堂|