【问题标题】:Average values of the top values for different categories不同类别的最高值的平均值
【发布时间】:2020-11-06 09:15:30
【问题描述】:

我有一张表格,其中包含 3 个字段、旅游地点、他们所在的国家/地区以及游客对该地点的平均评分。我想根据不同国家的热门旅游景点的平均评分来比较它们。我用的是 MySQL

基本上是这样的:

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

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

感谢您的帮助。

【问题讨论】:

  • , 是您的小数点符号吗?
  • 是的,在法国是逗号而不是小数点,我写这个问题的时候忘记改了^^'

标签: mysql sql average greatest-n-per-group


【解决方案1】:

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

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

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 中可用。

【讨论】:

  • 感谢您的帮助。我必须将 MySQL 更新到较新的版本才能使用窗口函数,但后来它起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 2011-03-21
  • 2014-08-05
  • 1970-01-01
相关资源
最近更新 更多