2014-09-12 91 views
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', 有人可以解释吗? (并就如何得到正确的结果有何建议?)

+0

使用不同的变量两个子查询。这可能是'@ counter'初始化时的问题。 – 2014-09-12 13:17:52

+0

@GordonLinoff 你的建议奏效!非常感谢!你有任何解释为什么相同的变量名称会导致这种现象(也许你应该将你的答案作为解决方案发布:)) – user3231622 2014-09-12 14:15:03

回答

1

正如戈登·利诺夫指出:你需要使用不同的变量为两个子查询