Re: [SQL ] ROW_NUMBER()的用法

看板Database作者 (TeemingVoid)時間13年前 (2012/07/25 19:30), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串3/3 (看更多)
: : 2.第二個範例少了PARTITION BY A : : 那麼當重複出現值的時候 : : 又是怎麼給1~9值?? : row_number() 只是單純地標註行號,如果處理重複值,請改用 : rank() 或 dense_rank() 函數,兩者的差別在於 dense_rank() : 一定連號,以下列例子來說,97是第三好成績 ... 推 s66449:您好 感謝您的回答 不過第2點 還是沒有回到我想要的問題?? 07/25 17:20 → s66449:想確認一下相同的欄位的話 順號是怎麼決定的 07/25 17:21 → s66449:您舉的例子只有兩個欄位 順號都是2比較沒甚麼差別 07/25 17:21 → s66449:但如果再更多欄位的話 那會怎麼排呢 07/25 17:22 什麼是「相同的欄位」? 還有,請問您之前有先問到多個欄位嗎? :) 再說詳細一點了,row_number()只會按照視覺上出現的次序編上列號, rank() 與 dense_rank() 才會處理相同欄位值的情況,從而出現相同 名次編號的情況。 → s66449:您舉的例子只有兩個欄位 順號都是2比較沒甚麼差別 07/25 17:21 → s66449:但如果再更多欄位的話 那會怎麼排呢 07/25 17:22 至於內容重複,如何排列,那就是你的問題了,愛怎麼排,由你決定, 更明確地講,由你給的 order by 決定。例如,總分一樣,由國文成績 決定。 順序決定了,名次也就出來了。 以這次我提的例子,再加上你現在追問的多重欄位,就有可能是這樣: select ..., rank() over (order by (score * 100 + 國文成績)) as 名次, ... select ..., rank() over (partition by 班級, order by (score * 100 + 國文成績)) as 名次, ... 當然啦! 這只是舉例。不過,你一定看得出來,順序與名次,由 order by 決定。因此,「那會怎麼排呢」 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.252.126.60

07/25 19:53, , 1F
不好意思 問的不是很清楚 還讓您又特別回了一篇
07/25 19:53, 1F

07/25 19:53, , 2F
真是受教了~~謝謝
07/25 19:53, 2F
文章代碼(AID): #1G3zZWLB (Database)
文章代碼(AID): #1G3zZWLB (Database)