【问题标题】:MySQL aggregated join?MySQL聚合连接?
【发布时间】:2021-09-25 20:29:43
【问题描述】:

我有一个带有架构的表:Table(rank, score)。 我需要进行一个查询,以获取排名高于每个排名的当前排名的分数的平均值。 查询(排名,average_score_of_greater_ranks)。

我尝试过类似的方法:

select `rank`, avg_score_of_greater_ranks
from Table t1
join (SELECT AVG(Revenue_Amount) as avg_score_of_greater_ranks
                        from Table t2
                        where t1.rank > t2.rank) as temp
order by `rank`

但它没有工作。任何帮助将不胜感激。

【问题讨论】:

  • 您使用的是哪个 MySQL 版本? (select version();)
  • 版本为8.0.24
  • rankscore是什么关系?

标签: mysql sql subquery correlated-subquery nested-queries


【解决方案1】:

我需要进行查询,以获取排名高于每个排名的当前排名的分数的平均值。查询(排名,average_of_lower_ranks)。

假设排名基于分数,这只是一个累积平均值。对于大于或等于给定分数的分数平均值:

select t1.*,
       avg(`rank`) over (order by `rank` desc)
from Table t1;

如果您只想要那些严格较大的平均值,那就有点棘手了。假设rank 是一个整数,你可以使用:

select t1.*,
       avg(`rank`) over (order by `rank`
                         range between 1 following and unbounded following
                        ) as avg_rank_greater
from t1;

如果排名与分数无关,可以将上述表达式中的order by rank替换为order by score

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2021-10-08
    • 2020-01-12
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多