У меня есть следующий запрос, который возвращает что-то вроде «top» -> '30', 'metrictype' -> 'cpu usage' (запрос вычисляет среднее использование CPU/MEM для 20 процентиль тяжелые ходовые машиныUnion all same query дважды возвращает 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))
Если I союз этот запрос с его собственным (см ниже), я получаю следующий результат:.
'сверху' -> '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))
Я не понимаю, почему мой результат 'сверху' -> '30', 'metrictype' -> 'Использование процессора' 'сверху' -> 'нулевой', 'metrictype' -> 'нулевой' вместо 'top' -> '30', 'metrictype' -> 'cpu usage' 'top' -> '30', 'metrictype' -> 'cpu usage', Кто-нибудь может это объяснить? (И сделать предложение о том, как получить правильный результат?)
Используйте другую переменную для двух подзапросов. Вероятно, это проблема, когда инициализируется '@ counter'. –
@GordonLinoff Ваше предложение сработало! Большое спасибо! У вас есть какие-либо объяснения, почему одно и то же переменное имя вызывает это явление (возможно, вы должны опубликовать свой ответ в качестве решения :)) – user3231622