我在Postgres 9.3.6中有一个表格如下:
utm_source value
fb 12
fb 8
google 3
google 4
null 5
我希望运行SQL查询以value
加utm_source
,但也包括总值。所以决赛桌应该是这样的:
utm_source sum
fb 20
google 7
null 5
all 32
这是我用的其他方式:
SELECT SUM(value) as sum FROM my_table GROUP BY utm_source;
但我也希望all
在那里!
答案 0 :(得分:1)
SELECT isnull(utm_source,'')
,SUM(value) as sum
FROM my_table
GROUP BY isnull(utm_source,'') with rollup
您可以稍后将NULL更新为“all”。
答案 1 :(得分:1)
使用CTE使基本表只扫描一次,这通常更快。 CTE会产生一些管理费用,因此可能无法支付小额费用。
WITH cte AS (
SELECT utm_source, sum(value) AS sum_value
FROM tbl
GROUP BY 1
)
SELECT * FROM cte
UNION ALL -- not just UNION !
SELECT 'all', sum(sum_value) FROM cte;
SQL Server使用grouping()
和rollup()
关键字为该任务提供了非标准扩展。以下是如何在Postgres中实现它: