我有一个名为 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 中执行此操作的最佳方法是什么。我不介意最终得到两张 table ,还是一张。
我知道如何通过代码获取所有相关行的所有支出:
SELECT product, SUM(spend)
FROM spending
WHERE to_include='Yes'
GROUP BY product;
但我不知道如何将每一行分成两组:一组是 proportion_overseas=0
和一组 proportion_overseas>0
.
我认为“子查询”不是正确的术语,所以我真的不知道要用 Google 搜索什么!
最佳答案
您可以使用条件聚合:
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;
关于sql - 如何运行子查询将表分成两组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332060/