如何用一条语句获取一张表某个字段的最小,平均,最大值,并且要获取这个最大值对应的用户?!

baidu_28726667 2019-06-04 11:25:54
select user_name, min(cpu_usage), avg(cpu_usage), max(cpu_usage) from pc_performance order by cpu_usage desc;


这样我能获取cpu使用率所有用户最小值,所有用户的平均值, 并且找出了某个用户的最大值. 但是我却没法办通过后面的 ordey by 获取这个最大值是哪个用户... 请问怎么才是正确的操作?
...全文
79 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AHUA1001 2019-06-04
  • 打赏
  • 举报
回复
这条语句,无论怎么执行,结果应该都是1条记录。1条记录ORDER BY有意义吗。
lx20012002 2019-06-04
  • 打赏
  • 举报
回复
.......刚才复制粘贴你源代码了,你都不带group by的吗?
select user_name, min(cpu_usage), avg(cpu_usage), max(cpu_usage) from pc_performance group by user_name order by max(cpu_usage) desc limit 1;
lx20012002 2019-06-04
  • 打赏
  • 举报
回复
select user_name, min(cpu_usage), avg(cpu_usage), max(cpu_usage) from pc_performance order by max(cpu_usage) desc limit 1;
baidu_28726667 2019-06-04
  • 打赏
  • 举报
回复
引用 9 楼 lx20012002 的回复:
select t2.* ,t1.* from pc_performance t1 inner join ( select min(cpu_usage), avg(cpu_usage), max(cpu_usage) as max_cpu_usage from pc_performance )t2 on t1.cpu_usage = t2.max_cpu_usage
果然成功了! 我对这种联表的不熟悉,惭愧...
lx20012002 2019-06-04
  • 打赏
  • 举报
回复
select t2.*
,t1.*
from pc_performance t1
inner join (
select min(cpu_usage), avg(cpu_usage), max(cpu_usage) as max_cpu_usage
from pc_performance
)t2
on t1.cpu_usage = t2.max_cpu_usage
baidu_28726667 2019-06-04
  • 打赏
  • 举报
回复
引用 6 楼 lx20012002 的回复:
[quote=引用 4 楼 baidu_28726667 的回复:] [quote=引用 2 楼 lx20012002 的回复:] .......刚才复制粘贴你源代码了,你都不带group by的吗? select user_name, min(cpu_usage), avg(cpu_usage), max(cpu_usage) from pc_performance group by user_name order by max(cpu_usage) desc limit 1;
这样变成取了 max(cpu_usage)那一行的记录了. min(cpu_usage), avg(cpu_usage), 都不对, 所以其它 avg(mem_usage) 之类的都不对了...[/quote] 那我不太理解你的需求,你不是就是找到cpu_usage最大值对应的用户吗?我这条语句是按照user_name汇总计算每个user_name的 min(cpu_usage), avg(cpu_usage), max(cpu_usage),然后取到cpu_usage最大那一行,不太理解哪有问题?[/quote] 我上面表达应该是有点错误. 我要取一张表所有用户的 min_cpu_usage字段 的平均值, 和所有用户的avg_cpu_usage字段的平均值. 然后要取这张表里面max_cpu_usage字段的最大值,并且取出它的用户名和记录时间.我怕自己描述不好, 我贴张图吧.
baidu_28726667 2019-06-04
  • 打赏
  • 举报
回复
引用 6 楼 lx20012002 的回复:
[quote=引用 4 楼 baidu_28726667 的回复:] [quote=引用 2 楼 lx20012002 的回复:] .......刚才复制粘贴你源代码了,你都不带group by的吗? select user_name, min(cpu_usage), avg(cpu_usage), max(cpu_usage) from pc_performance group by user_name order by max(cpu_usage) desc limit 1;
这样变成取了 max(cpu_usage)那一行的记录了. min(cpu_usage), avg(cpu_usage), 都不对, 所以其它 avg(mem_usage) 之类的都不对了...[/quote] 我上面表达应该是有点错误. 我要取一张表所有用户的 min_cpu_usage字段 的平均值, 和所有用户的avg_cpu_usage字段的平均值. 然后要取这张表里面max_cpu_usage字段的最大值,并且取出它的用户名和记录时间.我怕自己描述不好, 我贴张图吧..
lx20012002 2019-06-04
  • 打赏
  • 举报
回复
引用 4 楼 baidu_28726667 的回复:
[quote=引用 2 楼 lx20012002 的回复:]
.......刚才复制粘贴你源代码了,你都不带group by的吗?
select user_name, min(cpu_usage), avg(cpu_usage), max(cpu_usage) from pc_performance group by user_name order by max(cpu_usage) desc limit 1;


这样变成取了 max(cpu_usage)那一行的记录了. min(cpu_usage), avg(cpu_usage), 都不对, 所以其它 avg(mem_usage) 之类的都不对了...[/quote]

那我不太理解你的需求,你不是就是找到cpu_usage最大值对应的用户吗?我这条语句是按照user_name汇总计算每个user_name的 min(cpu_usage), avg(cpu_usage), max(cpu_usage),然后取到cpu_usage最大那一行,不太理解哪有问题?
遇星 2019-06-04
  • 打赏
  • 举报
回复
理解一下排序和分组
baidu_28726667 2019-06-04
  • 打赏
  • 举报
回复
引用 2 楼 lx20012002 的回复:
.......刚才复制粘贴你源代码了,你都不带group by的吗? select user_name, min(cpu_usage), avg(cpu_usage), max(cpu_usage) from pc_performance group by user_name order by max(cpu_usage) desc limit 1;
这样变成取了 max(cpu_usage)那一行的记录了. min(cpu_usage), avg(cpu_usage), 都不对, 所以其它 avg(mem_usage) 之类的都不对了...

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧