這完全取決於你想要什麼。無論是讓你對你的建議條款的分析結果將不得不rank() over (order by surname)
。這爲您提供在他們surname
的升序排列每個記錄的查詢rank
。當你有兩個人同姓那麼這兩個人理論上應該隨機的順序。因爲這是不rank()
其實做的結果集的任何排序,你需要一個order by
子句來做到這一點;或者至少保證,對結果你想要的。
喜歡的東西:
select rank() over (order by surname asc, familyname asc) as rnk
, surname, familyname
from my_table
order by rank() over (order by surname asc, familyname asc)
該查詢以升序姓和名的順序返回姓,姓和排名。訂購的結果集的排名也意味着傷害它應該是這樣的:
1 | Kovács | Albert
2 | Kovács | Dávid
3 | Nagy | Balázs
這是利益,並與解析函數的問題,你想要做的事情,你可以在大量具體的,但如果你你想,你必須在你運行的精確查詢傷害一個明確的答案。
的documentation提供了使用partition by
子句另一個例子。如果我們這個由familyname
適用於您的查詢,通過surname
劃分和排序您的查詢,結果集可能看起來像這樣。
select rank() over (partition by surname order by familyname asc) as rnk
, surname, familyname
from my_table
2 | Kovács | Dávid
1 | Kovács | Albert
1 | Nagy | Balázs
這意味着,我們的排名全部familynames每個單獨的姓氏。大衛是阿爾伯特後,他得到的秩2中的姓科瓦奇。需要注意的是,沒有具體的order by
有對於不要求結果集進行排序。
來源
2012-03-17 22:53:32
Ben
僅供參考 - 你可以下載,如果你想要做一些真正的測試,免費安裝Oracle XE。 – 2012-03-18 03:52:54