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 rankscore是什么关系? 【参考方案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 数据库聚合查询和联合查询操作

MySQL 数据库聚合查询和联合查询操作

SQL学习笔记 ----Mysql数据库的条件查询

MYSQL聚合函数分组查询和连接查询(一般人我不告诉他)废寝忘食只为博君一赞!

MYSQL聚合函数分组查询和连接查询(一般人我不告诉他)废寝忘食只为博君一赞!

MySQL表的高级增删改查