-1

我试图找到一种方法来查询数据库中前三个用户的收听次数,并输出他们的用户 ID 和排名。

有问题的两个表的架构如下:

User(user_id, email, first_name, last_name, password, created_on, last_sign_in)

PreviouslyPlayed(user_id, track_id, timestamp)

我可以看到有多少人通过计数查询来解决这个问题,但我想知道有没有办法通过排名或密集排名来做到这一点

4

1 回答 1

0

如果您只需要用户 ID 并且正在使用 Oracle 12g+,那么您可以执行以下操作:

select pp.user_id, rank() over (order by count(*) desc) as therank
from previouslyplayed pp
group by pp.user_id
order by count(*) desc
fetch first 3 rows only;

在早期版本中,您将使用子查询:

select pp.*
from (select pp.user_id, rank() over (order by count(*) desc) as therank
      from previouslyplayed pp
      group by pp.user_id
     ) pp
where therank <= 3;

您可能想查看row_number(), rank(), 并dense_rank()确保您得到了您真正想要的东西(不同之处在于它们处理关系的方式)。

join如果您担心user_id在一个表中调用的内容不是有效的用户 ID ,您只需要。在任何设计良好的数据库中,这似乎不太可能。

于 2015-11-30T00:41:48.330 回答