MySQL聚合连接?
Posted
技术标签:
【中文标题】MySQL聚合连接?【英文标题】:MySQL aggregated join? 【发布时间】: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
rank
和score
是什么关系?
【参考方案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
。
【讨论】:
以上是关于MySQL聚合连接?的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL聚合函数分组查询和连接查询(一般人我不告诉他)废寝忘食只为博君一赞!