首页 > 解决方案 > 不同类别的最高值的平均值

问题描述

我有一张桌子,上面有 3 个字段、旅游景点、他们所在的国家以及游客对这个地方的平均评分。我想根据不同国家/地区的热门旅游景点的平均评分来比较它们。我使用 MySQL

它基本上看起来像这样:

Eiffel Tower     | France  | 4,2
Trakoscan Castle | Croatia | 4,6

例如,法国 5 个最佳旅游景点的平均笔记与克罗地亚 5 个最佳旅游景点的平均笔记相比如何。我知道如何平均一个国家的所有地方并进行比较,但我不知道如何结合 LIMIT 和 GROUP BY

谢谢您的帮助。

标签: mysqlsqlaveragegreatest-n-per-group

解决方案


您可以使用窗口函数过滤每个国家/地区的前 5 个注释,然后进行汇总。

假设您的表有列和country,您可以将查询表述为:placerating

select country, avg(rating) avg_rating_top5
from (
    select t.*,
        row_number() over(partition by country order by rating desc) rn
    from mytable t
) t
where rn <= 5
group by country

请注意,窗口函数仅在 MySQL 8.0 中可用。


推荐阅读