查询没有分区依据或类似 rank() 的函数
Posted
技术标签:
【中文标题】查询没有分区依据或类似 rank() 的函数【英文标题】:Query without partition by or functions like rank() 【发布时间】:2019-06-13 16:25:26 【问题描述】:假设我们有表学生(姓名、年级、组、年份) 我们想要一个查询,为每个组对应的学生排名。 我知道这可以通过 rank() OVER 轻松完成(按组顺序按等级 DESC 分区)。但我认为这也可以通过自联接或子查询来完成。有什么想法吗?
【问题讨论】:
使用rank()
效率更高。您为什么要以其他方式进行操作?
【参考方案1】:
等价于rank()
的是:
select s.*,
(select 1 + count(*)
from students s2
where s2.group = s.group and
s2.grade > s.grade
) as rank
from students s;
【讨论】:
谢谢,但我对 partition by 等价物更感兴趣。如果没有 OVER(partition by),我们如何实现 partition by? @valer 。 . . (1) 这回答了你的问题。 (2) 如果你看一下相关性子句,我认为很明显与partition by
等价的是什么。
只是为了确定,分区是否等同于从您的查询继续(从学生按组排序,等级 DESC)?
@valer 。 . . partition by group
--> s2.group = s.group
.以上是关于查询没有分区依据或类似 rank() 的函数的主要内容,如果未能解决你的问题,请参考以下文章
hive 中row_number(),rank,dense_ran()的用法