Re: [SQL ] ROW_NUMBER()的用法

看板Database作者 (TeemingVoid)時間13年前 (2012/07/25 15:07), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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
您好 感謝您的回答 不過第2點 還是沒有回到我想要的問題??
07/25 17:20, 1F

07/25 17:21, , 2F
想確認一下相同的欄位的話 順號是怎麼決定的
07/25 17:21, 2F

07/25 17:21, , 3F
您舉的例子只有兩個欄位 順號都是2比較沒甚麼差別
07/25 17:21, 3F

07/25 17:22, , 4F
但如果再更多欄位的話 那會怎麼排呢
07/25 17:22, 4F
文章代碼(AID): #1G3viZmM (Database)
文章代碼(AID): #1G3viZmM (Database)