我有一张名为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_include
和proportion_overseas
实际上是每个组织的属性。
现在我想解决每个产品:
我也只想在此计算中仅包含to_include='Yes'
的行。
我不确定在SQL中执行此操作的最佳方法是什么。我不介意我最终得到两张桌子还是一张桌子。
我知道如何通过代码获取所有相关行的所有支出:
SELECT product, SUM(spend)
FROM spending
WHERE to_include='Yes'
GROUP BY product;
但我不知道的是如何将每一行分成两组:一组proportion_overseas=0
和一组proportion_overseas>0
。
我不认为'子查询'是正确的术语,所以我真的不知道谷歌会做些什么!
答案 0 :(得分: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;