看板 Database 關於我們 聯絡資訊
※ 引述《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
s66449:您好 感謝您的回答 不過第2點 還是沒有回到我想要的問題?? 07/25 17:20
s66449:想確認一下相同的欄位的話 順號是怎麼決定的 07/25 17:21
s66449:您舉的例子只有兩個欄位 順號都是2比較沒甚麼差別 07/25 17:21
s66449:但如果再更多欄位的話 那會怎麼排呢 07/25 17:22