【问题标题】:Query without partition by or functions like rank()查询没有分区依据或类似 rank() 的函数
【发布时间】:2019-06-13 16:25:26
【问题描述】:

假设我们有表学生(姓名、年级、组、年份) 我们想要一个查询,为每个组对应的学生排名。 我知道这可以通过 rank() OVER 轻松完成(按组顺序按等级 DESC 分区)。但我认为这也可以通过自联接或子查询来完成。有什么想法吗?

【问题讨论】:

  • 使用rank() 效率更高。您为什么要以其他方式进行操作?

标签: sql oracle join self-join


【解决方案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.
猜你喜欢
  • 1970-01-01
  • 2014-12-11
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多