首页 / MYSQL / MySQL限制,组和AVG查询
MySQL限制,组和AVG查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL限制,组和AVG查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1670字,纯文字阅读大概需要3分钟。
内容图文
![MySQL限制,组和AVG查询](/upload/InfoBanner/zyjiaocheng/880/9679cffa2b604effae35197a02548490.jpg)
这是给您的难题:
我将群集计算的统计信息保存在名为“ jobs”的MySQL表中.每个作业行都有一个执行作业的主机(不是唯一的),一个作业执行时间(以秒为单位)以及一个唯一的整数作为PK,因此我可以简单地通过订购PK来订购完成的作业.
截至目前,使用average和group by,我可以找到所有已完成作业中每个主机的平均执行时间(以秒为单位).我想要平均每个主机最近五个作业的平均时间,而不是平均每个主机的所有执行时间.
有各种各样的操作和分组依据示例,还有很多有限制的操作示例,但是有没有办法在一个相当简单的MySQL查询中将两者结合起来?
编辑:如果我不清楚,我希望主机1的平均执行时间为5,主机2的平均执行时间为5,等等.
解决方法:
我最初的反应是使用LIMIT将平均值限制为5个结果,这使我建议:
select a.host, avg(a.execution_time) from (select id, execution_time, host from jobs order by id desc limit 5) a group by a.host;
但是很明显,这将平均数限制为每个主机最近的5个工作,而不是最近的5个工作.
如果不使用某种存储过程,似乎很难使用LIMIT来限制平均值.这使我考虑使用mysql变量为每个作业分配每个主机的完成顺序或职位.
这未经测试,但是它说明的理论应该是一个很好的起点:
首先,我们应该根据作业的主机为每个作业分配一个职位:
select
host,
execution_time,
@current_pos := if (@current_host = host, @current_pos, 0) + 1 as position,
@current_host := host
from
(select @current_host := null, @current_pos := 0) set_pos,
jobs
order by
host,
id desc;
建立位置后,只需选择聚合函数,将结果限制在前5位:
select
jt.host,
avg(jt.execution_time)
from
(
select
host,
execution_time,
@current_pos := if (@current_host = host, @current_pos, 0) + 1 as position,
@current_host := host
from
(select @current_host := null, @current_pos := 0) set_pos,
jobs
order by
host,
id desc
) jt
where
jt.position <= 5
group
by host;
请让我知道这是否适合您,或者还有更多我未考虑的方面.这是一个有趣的问题.
内容总结
以上是互联网集市为您收集整理的MySQL限制,组和AVG查询全部内容,希望文章能够帮你解决MySQL限制,组和AVG查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。