查阅属性的某些值的记录

Don*_*rre 1 sql postgresql greatest-n-per-group

我有一个表格,有以下方案(idMovie,流派,标题,评级).

如何查询返回每种类型的最佳评级的十部电影?

我认为可以使用'ORDER BY'和'LIMIT'来解决一个类型的前10名,但我不知道如何为每种类型做到这一点.

免责声明:我是sql的新手.

Kam*_*ski 5

这是一个典型的问题,称为最大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
Run Code Online (Sandbox Code Playgroud)

这可能会为每种类型返回10个以上的标题,因为可能存在联系(对于属于一种类型的不同电影具有相同的评级).如果您只想要前10名而不看领带,请使用row_number而不是dense_rank.