Скажем, у меня есть таблица под названием census
со следующей информацией:
COUNTRY PROVINCE CITY POPULATION
==============================================
USA California Sacramento 1234
USA California SanFran 4321
USA Texas Houston 1111
USA Texas Dallas 2222
Canada Ontario Ottawa 3333
Canada Manitoba Winnipeg 4444
Я строю отчет на уровне страны/провинции, который дает мне следующее:
SELECT country, province, SUM(population)
FROM census
GROUP BY country, province;
COUNTRY PROVINCE SUM(POPULATION)
=======================================
USA California 5555
USA Texas 3333
Canada Ontario 3333
Canada Manitoba 4444
Я хочу, чтобы в отчете содержалась "общая сумма", так что конечный результат выглядит следующим образом:
COUNTRY PROVINCE SUM(POPULATION)
=======================================
USA California 5555
USA Texas 3333
Canada Ontario 3333
Canada Manitoba 4444
TOTAL 16665
Я знаком с ROLLUP
s, но я не могу найти комбинацию, которая получает меня, что я ищу. Использование GROUP BY ROLLUP(country, province)
включает в себя общее значение, которое я хочу, но оно также включает большое количество дополнительных значений, которые мне не нужны. Это также верно при GROUP BY ROLLUP(country), province
Как я могу сделать "полную" запись?
В настоящее время я вычисляю его с помощью UNION ALL
и повторяю 90% первого запроса с помощью другого GROUP BY
, но поскольку первый запрос нетривиален, результатом является медленный и уродливый код.
Здесь SQL Fiddle для тех, кто хочет играть с этим: http://sqlfiddle.com/#!4/12ad9/5