SQL Как суммировать SELECT - PullRequest
0 голосов
/ 01 апреля 2020

Как я могу суммировать этот выбор? Мне нужна сумма t.value из одного выбора и t.value из другого

select t.value as OneValues, t.clock as time
from hosts h, items i, history_uint t 
where i.hostid=h.hostid and t.itemid=i.itemid and i.hostid='223344'   and t.itemid = '0223344'
select t.value as SecondValues, t.clock as time 
from hosts h, items i,history_uint t
where i.hostid=h.hostid and t.itemid=i.itemid and i.hostid='112233' and t.itemid = '0112233'

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

Используйте Sum агрегатную функцию с оператором case, как показано ниже, если вы хотите, чтобы сумма этих значений t.value основывалась на t.clock, затем сгруппируйте их по этому столбцу, чтобы получить часы, а сумму значений.

select sum(case when  i.hostid='223344'   and t.itemid = '0223344' then t.value end) as FirstValue,sum(case when  i.hostid='112233' and t.itemid = '0112233' then t.value end) as SecondValue
from hosts h, items i,history_uint t
where i.hostid=h.hostid and t.itemid=i.itemid

Если он основан на t.clock, то

   select t.clock, sum(case when  i.hostid='223344'   and t.itemid = '0223344' then t.value end) as FirstValue,sum(case when  i.hostid='112233' and t.itemid = '0112233' then t.value end) as SecondValue
    from hosts h, items i,history_uint t
    where i.hostid=h.hostid and t.itemid=i.itemid
    group by t.clock
0 голосов
/ 01 апреля 2020

Требуется условное агрегирование:

select sum(case when i.hostid = '223344' and t.itemid = '0223344' then t.value end) as value_1,
       sum(case when i.hostid = '112233' and t.itemid = '0112233' then t.value end) as value_1,

from hosts h join
     items i
     on i.hostid = h.hostid join
     history_uint t
     on t.itemid = i.itemid ;

Вы можете повторить условия в предложении where, если у вас много данных.

where (i.hostid = '223344' and t.itemid = '0223344') or
      (i.hostid = '112233' and t.itemid = '0112233')

Очень импорт: Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандарт , читаемый синтаксис JOIN.

0 голосов
/ 01 апреля 2020

Вы можете попробовать это ниже logi c -

SELECT i.hostid,t.itemid,t.value as OneValues, t.clock as time
FROM hosts h 
INNER JOIN items i 
    ON i.hostid=h.hostid
    AND i.hostid IN ('223344','112233')
    AND i.itemid IN ('0223344','0112233')
INNER JOIN  history_uint t 
    ON t.itemid=i.itemid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...