2016-03-31 40 views
1

我有一張名爲spending的表(實際上在BigQuery中,雖然我認爲這不一定與此問題相關),大約有2.9GB和1900萬行。如何運行子查詢將表分成兩組?

的數據結構是這樣的:

product,org,spend,to_include,proportion_overseas 
---------------------------------- 
SK001,03V,"Yes",0.1 
SK002,03V,2.4,"Yes",0.1 
SK001,O3T,66.1,"No",0.47 
SK002,03T,87.1,"No",0.47 
SK001,04C,16.1,"Yes",0 
SK002,04C,27.1,"Yes",0 
... 

有關信息,它也會稍有去歸一化,在to_includeproportion_overseas實際上每個組織的性質。

現在我要工作了,爲每個產品:

  • 總量,所有的組織與用在該產品沒有海外支出,並
  • 總量與非零的所有組織海外花費在該產品上。

我也只想在這個計算中只包括行,其中to_include='Yes'

我不確定在SQL中執行此操作的最佳方法是什麼。我不介意我是否有兩張桌子或一張桌子。

我知道如何通過代碼來獲取所有開支,爲所有相關行:

SELECT product, SUM(spend) 
FROM spending 
WHERE to_include='Yes' 
GROUP BY product; 

但我不知道是怎麼來的每一行分成兩組:一組,其中proportion_overseas=0和一組其中proportion_overseas>0

我不認爲'子查詢'是正確的術語,所以我真的不知道該給Google做什麼!

回答

0

可以使用條件彙總:

SELECT product, SUM(spend), 
     SUM(CASE WHEN proportion_overseas = 0 THEN spend ELSE 0 END) as not_overseas, 
     SUM(CASE WHEN proportion_overseas > 0 THEN spend ELSE 0 END) as overseas 
FROM spending 
WHERE to_include='Yes' 
GROUP BY product; 
+0

輝煌,謝謝! – Richard