首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Rank()分析函数

Oracle Rank()分析函数
EN

Stack Overflow用户
提问于 2012-03-18 06:16:51
回答 2查看 2.7K关注 0票数 0

如果我把3个名字放在一行:

科瓦茨·阿尔伯特,科瓦茨·达维德,纳吉·巴拉兹

Surename是Kovács,Nagy

FamilyName是阿尔伯特,达维德,巴拉兹

如果我对Familyname运行rank()解析函数,输出会是什么?

代码语言:javascript
复制
1-Kovács Albert
1-Kovács Dávid
3-Nagy Balázs

代码语言:javascript
复制
1-Kovács Dávid
1-Kovács Albert
3-Nagy Balázs

或者它会是随机的?

我没有在我的电脑上安装甲骨文,如果你能给我一些在线免费学习实例,我将不胜感激…

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-18 06:30:37

如果您在Familyname上执行这样的查询。输出将如下所示:

代码语言:javascript
复制
1-Kovács Albert
1-Kovács Dávid
1-Nagy Balázs

使用此查询:

代码语言:javascript
复制
SELECT
  RANK() OVER(PARTITION BY FamilyName ORDER BY FamilyName) AS iRank,
  Surename,
  FamilyName
FROM
  Table1

如果您在SureNameorder by FamilyName上执行RANK。输出将如下所示:

代码语言:javascript
复制
1-Kovács Albert
2-Kovács Dávid
1-Nagy Balázs

使用此查询:

代码语言:javascript
复制
SELECT
  RANK() OVER(PARTITION BY Surename ORDER BY FamilyName) AS iRank,
  Surename,
  FamilyName
FROM
  Table1
票数 2
EN

Stack Overflow用户

发布于 2012-03-18 06:53:32

这完全取决于你想要什么。要获得您建议的结果,您的分析子句必须为rank() over ( order by surname )。此查询按记录的surname升序为您提供每条记录的rank。因为你有两个同姓的人,所以理论上这两个人的顺序应该是随机的。这是因为rank()实际上并不对结果集做任何排序,您需要一个order by子句来做这件事;或者至少保证您想要的结果。

类似于:

代码语言:javascript
复制
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 ) 

此查询按姓氏和姓氏的升序返回姓氏、姓氏和等级。结果集是按等级排序的,这意味着它将如下所示:

代码语言:javascript
复制
1 | Kovács | Albert
2 | Kovács | Dávid
3 | Nagy   | Balázs

这就是分析函数的优点和问题,您可以非常具体地说明您希望做什么,但如果您想要一个特定的答案,您必须在您运行的查询中做到准确。

documentation提供了另一个使用partition by子句的示例。如果我们将其应用于您的查询,按surname分区并按familyname排序,您的查询和结果集可能如下所示。

代码语言:javascript
复制
select rank() over ( partition by surname order by familyname asc ) as rnk
     , surname, familyname
  from my_table

代码语言:javascript
复制
2 | Kovács | Dávid
1 | Kovács | Albert
1 | Nagy   | Balázs

这意味着我们对每个姓氏的所有姓氏分别进行排名。因为达维德在追逐阿尔伯特,所以他在科瓦奇的姓氏中的排名是2。请注意,在没有特定order by的情况下,不需要对结果集进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9754262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档