Сумма сумм двух запросов

У меня есть два основных запроса, которые мне нужно суммировать:

Select hours, sum(hours) FROM table WHERE name='xxx' and Description='Worked'
Select hours2, sum(hours2) FROM table WHERE name='xxx' and Description2='Worked'

Я пробовал UNION, и он будет получать итоговые значения каждого запроса, но он не будет их комбинировать.

Настройка таблицы:

  • ID
  • name
  • часов
  • описание
  • hours2
  • description2

Мне нужно соотнести часы с описанием и hours2 с описанием2, поэтому у меня есть два разных запроса. Мне нужно суммировать общие часы и часы2.

Ответ 1

Прежде всего, вы пропустили group by, поэтому, хотя mysql не жалуется на него, значения hours и hours2 не имеют смысла. Во-вторых, вы можете получить результат UNION в производном подзапросе, так что вы получите нужный итог:

SELECT SUM(hr) FROM
(
  Select sum(hours) as hr FROM table WHERE name='xxx' and Description='Worked'
  UNION ALL
  Select sum(hours2) as hr FROM table WHERE name='xxx' and Description2='Worked'
)a

Ответ 2

Вам нужно будет поместить ваш союз в подзапрос:

SELECT  Hours,
        SUM(Hours) AS Hours,
        SUM(Hours2) AS Hours2
FROM    (   SELECT  Hours,
                    SUM(Hours) AS Hours,
                    0 AS Hours2
            FROM    Table
            WHERE   Name = 'xxx'
            AND     Description = 'Worked'
            GROUP BY Hours
            UNION ALL
            SELECT  Hours2,
                    0 AS Hours,
                    SUM(Hours2) AS Hours
            FROM    Table
            WHERE   Name = 'xxx'
            AND     Description2 = 'Worked'
            GROUP BY Hours2
        ) t
GROUP BY Hours;