Re: [SQL ] ROW_NUMBER()的用法
※ 引述《s66449 (老實樣)》之銘言:
: -- 僅僅使用ROW_NUMBER() OVER的結果
: SELECT *,ROW_NUMBER() OVER(ORDER BY A DESC)NUM FROM TESTDB
: A B NUM
: ------------------------
: A3 B7 1
: A3 B3 2
: A3 B4 3
: A2 B4 4
: A2 B5 5
: A2 B6 6
: A1 B1 7
: A1 B2 8
: A1 B3 9
: 可以看到它只是單純標出了行號。
: 1.想請問這兩個範例都是ORDER BY A DESC
: 為什麼第一個範例是從A1排到A3
: 而第二個範例是從A3排到A1??
因為你的 「ORDER BY」 有註記 DESC,所以,遞減排列。
有 「partition by」,會先形成區段再各區段「order by」;
沒有「partition by」,就等同於全部資料構成一區。
: 2.第二個範例少了PARTITION BY A
: 那麼當重複出現值的時候
: 又是怎麼給1~9值??
row_number() 只是單純地標註行號,如果處理重複值,請改用
rank() 或 dense_rank() 函數,兩者的差別在於 dense_rank()
一定連號,以下列例子來說,97是第三好成績。
id score rank() dense_rank() row_number()
1 100 1 1 1
2 98 2 2 2
3 98 2 2 3
4 97 4 3 4
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.104.154.124
推
07/25 17:20, , 1F
07/25 17:20, 1F
→
07/25 17:21, , 2F
07/25 17:21, 2F
→
07/25 17:21, , 3F
07/25 17:21, 3F
→
07/25 17:22, , 4F
07/25 17:22, 4F
討論串 (同標題文章)