我有一个具有以下方案的表格(idMovie,类型,标题,评分)。
我如何进行查询以返回每种类型的最佳评级的十部电影?
我认为可以使用“ ORDER BY”和“ LIMIT”来解决该类型的前10名问题,但我不知道如何针对每种类型做到这一点。
免责声明:我是sql的新手。
答案 0 :(得分:5)
这是一个典型的问题,称为“ 每组最多N个”。通常无法使用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
。