2016-01-07 62 views
3

有沒有辦法僅對特定GROUP BY列而不是所有GROUP BY列執行彙總聚合?而不是SELECT a,b,SUM(c) FROM sample.data GROUP BY a,bSELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b),我試圖實現SELECT a,b,SUM(c) FROM sample.data GROUP BY a, ROLLUP(b)。這在BigQuery中可行嗎?Bigquery中的部分彙總聚合

我現在想象得到的唯一方法是爲每一列創建一個GROUPING列,我不希望將它們捲起來,並將這些列過濾爲只有0。但是,嘗試此操作時,我得到的錯誤是Errors encountered during job execution. Resources exceeded during query execution.,如果不包括ROLLUP(),我不會收到該錯誤。 (即使與​​同樣錯誤。)

想法?

+0

那麼我想你首先需要解決你的「資源超過...」問題。這在我看來就像是一個單獨的問題,你應該專注於通過事物來呈現你的實際查詢。只是建議... –

+0

只有在「GROUP BY」中使用「ROLLUP()」時纔會出現「資源超出」錯誤。沒有「ROLLUP()」,查詢正常執行。我在5個不同列上的實際查詢組只需要在其中一個上滾動。我認爲在5個不同的列(而不是1)上滾動的複雜性增加了這個錯誤,這就是爲什麼我想知道是否有辦法只在一列上滾動 – blah

+0

得到它 - 我被你的陳述困惑了 - 「(即使與GROUP EACH BY同樣錯誤)」 –

回答

1

我不認爲像GROUP BY a, ROLLUP(b)這樣的sysntax可用!不是這樣!
正如你的情況下,解決方法我會提出下面這樣的語法mimicing

因此,假設你有表sample.dataa, b, c, d,你需要模仿

SELECT a, b, c, SUM(d) as s 
FROM table 
GROUP BY a, b, ROLLUP(c) 

下面是ROLLUP少「版本「它的

SELECT a, b, c, s 
FROM (
    SELECT a, b, c, SUM(d) AS s 
    FROM sample.data 
    GROUP BY a, b, c 
), (
    SELECT a, b, NULL AS c, SUM(s) AS s 
    FROM (
    SELECT a, b, c, SUM(d) AS s 
    FROM sample.data 
    GROUP BY a, b, c 
) 
    GROUP BY 1, 2, 3 
) 
ORDER BY a, b, c 
1

MS SQL支持團體喜歡這些:

GROUP BY a, ROLLUP(b, c) 
GROUP BY ROLLUP(a, b), ROLLUP(c, d) 

見第https://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx

谷歌BQ仍然不支持。

您可以使用HAVING子句,像這樣:

SELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b) 
HAVING a is not null 

OR

SELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b) 
HAVING GROUPING(a)=0 

這個方案不符合錯誤解決問題:查詢執行過程中的資源超出。

我想,對於彙總,多維數據集和分組集合的全面支持是未來BQ版本的一個很好的特性。