Как добавить общую сумму к этому запросу? - PullRequest
0 голосов
/ 15 ноября 2018

С этим запросом:

With EX1 AS
(
SELECT
idcompany,
idemploy,
import
FROM data
WHERE
idcompany in ('000405', '000102')
)
SELECT * 
FROM EX1
UNION ALL
SELECT idcompany, 'Total', sum(import) from EX1
GROUP BY idcompany
ORDER BY
idcompany,
idemploy

Я получаю:

idcompany idemploy import
000102    0000001     100
000102    0000002     200
000102     Total      300
000405    0000001      50
000405    0000002      70
000405     Total      120

И я хотел бы получить:

idcompany idemploy import
000102    0000001     100
000102    0000002     200
000102     Total      300
000405    0000001      50
000405    0000002      70
000405     Total      120
Grand      Total      420 

Какой код у меня естьдобавить к запросу, и , где я должен добавить его?Спасибо.

Ответы [ 2 ]

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

Вы можете использовать подпункт ROLLUP предложения GROUP BY (Postgres 9.5+) вместе с функцией Grouping, которая идеально подходит для таких операций и эффективнее, чем те, UNION ALL s

Docs

SELECT CASE 
        WHEN GROUPING(idcompany) = 1
            AND GROUPING(idemploy) = 1
            THEN 'Grand'
        ELSE idcompany
        END AS idcompany
    ,CASE GROUPING(idemploy)
        WHEN 1
            THEN 'Total'
        ELSE idemploy
        END AS idemploy
    ,SUM(import)
FROM data
GROUP BY ROLLUP(idcompany, idemploy);

Демо

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

Вы можете добавить

UNION ALL
SELECT 'Grand', 'Total', sum(import) from EX1

к вашему запросу.

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