【问题标题】:Consult records for certain values of an attribute [duplicate]查询属性的某些值的记录[重复]
【发布时间】:2019-02-16 09:27:08
【问题描述】:

我有一张表格,其中包含以下方案(idMovie、流派、标题、评级)。

如何进行查询以返回每种类型评分最高的十部电影?

我认为可以使用 'ORDER BY' 和 'LIMIT' 来获得一个流派的前 10 名,但我不知道如何为每个流派做到这一点。

免责声明:我是 sql 新手。

【问题讨论】:

标签: sql postgresql greatest-n-per-group


【解决方案1】:

这是一个典型的问题,称为 greatest-N-per-group。这通常无法使用order by + limit 解决(除非您使用LATERAL,在我看来这更复杂),因为正如您所提到的,它是对最大 N 问题但不是每个组的问题的答案。在您的情况下,电影类型是组。

您可以使用dense_rank 窗口函数根据子查询中每种类型的评分生成排名,然后选择前 10 名:

select title, rating
from (
  select title, rating, dense_rank() over (partition by genre order by rating desc) as rn
  from yourtable
) t
where rn <= 10

这可能会为每种类型返回超过 10 个标题,因为可能存在关联(属于一种类型的不同电影的评级相同)。如果您只想要前 10 名而不查看平局,请使用 row_number 而不是 dense_rank

【讨论】:

猜你喜欢
  • 2014-08-16
  • 2016-07-27
  • 2013-04-20
  • 2011-09-11
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多