Как сделать запрос с несколькими суммами в одной строке без подзапросов? - PullRequest
0 голосов
/ 09 ноября 2018

Мне нужен запрос, который возвращает четыре разные суммы на основе столбца, но я не знаю, как это сделать без подзапросов.

Что мне нужно сделать, так это в основном так: у меня есть две таблицы: "caixa" и "movimentacao". Таблица «movimentacao» имеет поле «тип», которое находится в диапазоне от 0 до 3, и поле «значение», и нуждается в запросе, который возвращает сумму значений для каждого типа «movimentacao», принадлежащего «caixa», но в одной строке, поэтому группировка по типу не будет работать.

Пока мое решение:

SELECT
    (SELECT SUM(value) FROM movimentacao where id_caixa = x.id_caixa and type = 0)
    (SELECT SUM(value) FROM movimentacao where id_caixa = x.id_caixa and type = 1)
    (SELECT SUM(value) FROM movimentacao where id_caixa = x.id_caixa and type = 2)
    (SELECT SUM(value) FROM movimentacao where id_caixa = x.id_caixa and type = 3)
FROM caixa x

Есть ли способ сделать это без этих четырех подзапросов, используя вместо этого объединения?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете сделать это с помощью агрегации:

SELECT SUM( CASE WHEN m.type = 0 THEN x.value END ) as type_0,
       SUM( CASE WHEN m.type = 1 THEN x.value  END ) as type_1,
       SUM( CASE WHEN m.type = 2 THEN x.value  END ) as type_2,
       SUM( CASE WHEN m.type = 3 THEN x.value  END ) as type_3
FROM caixa x JOIN
     movimentacao m
     ON x.id_caixa = m.id_caixa;
0 голосов
/ 09 ноября 2018

Вы можете сделать несколько OR

SELECT SUM(value) FROM movimentacao where id_caixa = x.id_caixa and type = 0 or type = 1 or type = 3

Или используйте BETWEEN

SELECT SUM(value) FROM movimentacao where id_caixa = x.id_caixa and type BETWEEN 0 AND 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...