这完全取决于你想要什么。无论是让你对你的建议条款的分析结果将不得不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