第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

SQL RANK()與ROW_NUMBER()

SQL RANK()與ROW_NUMBER()

慕絲7291255 2019-09-19 09:20:00
我對(duì)這些之間的差異感到困惑。運(yùn)行以下SQL會(huì)獲得兩個(gè)完美的結(jié)果集。有人可以解釋一下這些差異嗎?SELECT ID, [Description], RANK()       OVER(PARTITION BY StyleID ORDER BY ID) as 'Rank'      FROM SubStyleSELECT ID, [Description], ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) as 'RowNumber' FROM SubStyle
查看完整描述

3 回答

?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

ROW_NUMBER:返回以1開頭的每一行的唯一編號(hào)。對(duì)于具有重復(fù)值的行,將對(duì)該數(shù)字進(jìn)行仲裁。

排名:為以1開頭的每一行指定唯一編號(hào),但具有重復(fù)值的行除外,在這種情況下,將為每個(gè)重復(fù)排名分配相同的排名并在序列中顯示間隙。


查看完整回答
反對(duì) 回復(fù) 2019-09-19
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

如果您在特定訂購(gòu)值的分區(qū)中存在關(guān)聯(lián),則只會(huì)看到差異。


RANK并且  DENSE_RANK在這種情況下是確定性的,對(duì)于排序列和分區(qū)列具有相同值的所有行將以相等的結(jié)果結(jié)束,而ROW_NUMBER將任意地(非確定地)將遞增結(jié)果分配給綁定的行。


示例:(所有行都相同,StyleID所以在同一個(gè)分區(qū)中,在該分區(qū)中,前3行在排序時(shí)綁定ID)


WITH T(StyleID, ID)

     AS (SELECT 1,1 UNION ALL

         SELECT 1,1 UNION ALL

         SELECT 1,1 UNION ALL

         SELECT 1,2)

SELECT *,

       RANK() OVER(PARTITION BY StyleID ORDER BY ID)       AS 'RANK',

       ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) AS 'ROW_NUMBER',

       DENSE_RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS 'DENSE_RANK'

FROM   T  

返回


StyleID     ID       RANK      ROW_NUMBER      DENSE_RANK

----------- -------- --------- --------------- ----------

1           1        1         1               1

1           1        1         2               1

1           1        1         3               1

1           2        4         4               2

您可以看到,對(duì)于三個(gè)相同的行,ROW_NUMBER增量,RANK值保持相同然后跳到4。DENSE_RANK也為所有三行分配相同的排名,但是下一個(gè)不同的值被賦值為2。


查看完整回答
反對(duì) 回復(fù) 2019-09-19
?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

本文介紹了ROW_NUMBER()和之間有趣的關(guān)系DENSE_RANK()(RANK()函數(shù)沒有特別處理)。當(dāng)您需要ROW_NUMBER()在SELECT DISTINCT語句上生成時(shí),ROW_NUMBER()將在關(guān)鍵字刪除它們之前生成不同的值DISTINCT。例如這個(gè)查詢


SELECT DISTINCT

  v, 

  ROW_NUMBER() OVER (ORDER BY v) row_number

FROM t

ORDER BY v, row_number

...可能會(huì)產(chǎn)生這個(gè)結(jié)果(DISTINCT沒有效果):


+---+------------+

| V | ROW_NUMBER |

+---+------------+

| a |          1 |

| a |          2 |

| a |          3 |

| b |          4 |

| c |          5 |

| c |          6 |

| d |          7 |

| e |          8 |

+---+------------+

鑒于此查詢:


SELECT DISTINCT

  v, 

  DENSE_RANK() OVER (ORDER BY v) row_number

FROM t

ORDER BY v, row_number

...在這種情況下產(chǎn)生你可能想要的東西:


+---+------------+

| V | ROW_NUMBER |

+---+------------+

| a |          1 |

| b |          2 |

| c |          3 |

| d |          4 |

| e |          5 |

+---+------------+

請(qǐng)注意,函數(shù)的ORDER BY子句DENSE_RANK()將需要子句中的所有其他列SELECT DISTINCT才能正常工作。


這樣做的原因是邏輯上,窗口函數(shù)在DISTINCT應(yīng)用之前計(jì)算。


所有三個(gè)功能相比較

使用PostgreSQL / Sybase / SQL標(biāo)準(zhǔn)語法(WINDOW子句):


SELECT

  v,

  ROW_NUMBER() OVER (window) row_number,

  RANK()       OVER (window) rank,

  DENSE_RANK() OVER (window) dense_rank

FROM t

WINDOW window AS (ORDER BY v)

ORDER BY v

... 你會(huì)得到:


+---+------------+------+------------+

| V | ROW_NUMBER | RANK | DENSE_RANK |

+---+------------+------+------------+

| a |          1 |    1 |          1 |

| a |          2 |    1 |          1 |

| a |          3 |    1 |          1 |

| b |          4 |    4 |          2 |

| c |          5 |    5 |          3 |

| c |          6 |    5 |          3 |

| d |          7 |    7 |          4 |

| e |          8 |    8 |          5 |

+---+------------+------+------------+


查看完整回答
反對(duì) 回復(fù) 2019-09-19
  • 3 回答
  • 0 關(guān)注
  • 1390 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)