说我有一张叫做人口普查的表格,具有以下信息:
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),省也是如此
如何做出“总”记录?
我正在使用UNION ALL计算它,并使用不同的GROUP BY重复90%的第一个查询,但是由于第一个查询不是平凡的,所以结果是缓慢而丑的代码.
这是一个sql小提琴,想要玩这个:http://sqlfiddle.com/#!4/12ad9/5
解决方法
这正是07000表达式设计的:
SELECT country,SUM(population) FROM census GROUP BY GROUPING SETS ( (country,province),-- first group by country and province () -- then by (nothing),i.e. a total grouping );