1
我有以下查询,返回类似'顶部' - >'30','metrictype' - >'cpu用法' (查询计算平均CPU/MEM使用率20个百分位最重的跑步机联合所有相同的查询两次返回null
SELECT round(avg(avgcpuusage)) as 'top', metrictype
FROM
(
SELECT (vmstatstemp.avgcpuusage),
vmstatstemp.vmname,
vmstatstemp.metrictype,
@counter := @counter +1 AS counter
FROM (select @counter:=0) AS initvar, (select round(avg(vmstats.metricvalue)) as 'avgcpuusage', vmstats.vmname,
vmstats.metrictype from vmstats
join vms on vms.naam = vmstats.vmname
join klanten on vms.klant = klanten.ID
where metrictype = 'cpu usage'
AND SUBSTRING(vmstats.dataEntryTimestamp,4,7) = date_format(now(),'%m:%Y')
group by vmname
order by avgcpuusage desc) vmstatstemp
) as temp
where counter < round(0.2* (@counter+1))
如果我工会此查询与自己(见下文),我得到以下结果:
'顶' - > '30', 'metrictype' - > 'cpu usage' 'top' - >'null','metrictype' - >'null'
SELECT round(avg(avgcpuusage)) as 'top', metrictype
FROM
(
SELECT (vmstatstemp.avgcpuusage),
vmstatstemp.vmname,
vmstatstemp.metrictype,
@counter := @counter +1 AS counter
FROM (select @counter:=0) AS initvar, (select round(avg(vmstats.metricvalue)) as 'avgcpuusage', vmstats.vmname,
vmstats.metrictype from vmstats
join vms on vms.naam = vmstats.vmname
join klanten on vms.klant = klanten.ID
where metrictype = 'cpu usage'
AND SUBSTRING(vmstats.dataEntryTimestamp,4,7) = date_format(now(),'%m:%Y')
group by vmname
order by avgcpuusage desc) vmstatstemp
) as temp
where counter < round(0.2* (@counter+1))
union all
SELECT round(avg(avgcpuusage)) as 'top', metrictype
FROM
(
SELECT (vmstatstemp.avgcpuusage),
vmstatstemp.vmname,
vmstatstemp.metrictype,
@counter := @counter +1 AS counter
FROM (select @counter:=0) AS initvar, (select round(avg(vmstats.metricvalue)) as 'avgcpuusage', vmstats.vmname,
vmstats.metrictype from vmstats
join vms on vms.naam = vmstats.vmname
join klanten on vms.klant = klanten.ID
where metrictype = 'cpu usage'
AND SUBSTRING(vmstats.dataEntryTimestamp,4,7) = date_format(now(),'%m:%Y')
group by vmname
order by avgcpuusage desc) vmstatstemp
) as temp
where counter < round(0.2* (@counter+1))
我不明白为什么我的结果是 'top' - >'30','metrictype' - >'cpu usage' 'top' - >'null','metrictype' - >'null' 'top' - >'30','metrictype' - >'cpu usage' 'top' - >'30','metrictype' - >'cpu usage', 有人可以解释吗? (并就如何得到正确的结果有何建议?)
使用不同的变量两个子查询。这可能是'@ counter'初始化时的问题。 – 2014-09-12 13:17:52
@GordonLinoff 你的建议奏效!非常感谢!你有任何解释为什么相同的变量名称会导致这种现象(也许你应该将你的答案作为解决方案发布:)) – user3231622 2014-09-12 14:15:03