【发布时间】:2014-11-03 09:23:35
【问题描述】:
假设我有一个名为 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
我熟悉ROLLUPs,但我似乎无法找到能够满足我需求的组合。使用GROUP BY ROLLUP(country, province) 包含了我想要的总价值,但它也包含了大量我不关心的额外价值。 GROUP BY ROLLUP(country), province 也是如此
我怎样才能制作“总”记录?
我目前正在使用 UNION ALL 计算它,并使用不同的 GROUP BY 重复第一个查询的 90%,但由于第一个查询很重要,因此结果是缓慢而丑陋的代码。
这里有一个 SQL Fiddle 供想要玩这个的人使用:http://sqlfiddle.com/#!4/12ad9/5
【问题讨论】:
-
@Bulat - 用于
GROUP BY中的单个列,并使用 SQL Server 特定的语法。 -
好吧,你可以在那里找到相同的答案并给它投票。如果只有列的数量和它们的名称很重要……而且对于提出的问题,它仍然是 +1。
标签: sql oracle group-by rollup grouping-sets