2015-04-03 79 views
1

我在Postgres的9.3.6的表看起來像這樣:如何按參數進行分組,但也包括總聚合(未分組)?

utm_source value 
fb   12 
fb   8 
google  3 
google  4 
null   5 

我想utm_source運行SQL查詢來概括value,還包括總價值爲好。所以,最終的表應該是這樣的:

utm_source sum 
fb   20 
google  7 
null   5 
all   32 

這是我想以其它方式使用:

SELECT SUM(value) as sum FROM my_table GROUP BY utm_source; 

但我想all在有作爲!

+2

ROLLUP或者分組集合一些選項,並具有覆蓋在這個問題上的幾個選項:http://stackoverflow.com/q/14478361/ 84206 – AaronLS 2015-04-03 21:58:02

+0

請標記您的DBMS,因爲可能存在特定於平臺的解決方案。 – paqogomez 2015-04-03 22:16:57

+0

這是postgres 9.3.6 – 2015-04-03 22:49:07

回答

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的:

1
SELECT isnull(utm_source,'') 
     ,SUM(value) as sum 
FROM my_table 
GROUP BY isnull(utm_source,'') with rollup 

您可以稍後將NULL更新爲'all'。

+0

OP首先沒有說明RDBMS。它是Postgres,'rollup'是SQL Server的一個非標準功能,不適用於Postgres。詳情:http://dba.stackexchange.com/questions/94817/grouping-equivalent-in-postgresql/94822#94822 – 2015-04-03 23:51:10