sql - 如何运行子查询将表分成两组?

标签 sql postgresql google-bigquery

我有一个名为 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 中执行此操作的最佳方法是什么。我不介意最终得到两张 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/

相关文章:

php - Laravel 获取最近加入表的日期

sql - 从触发器插入没有发生?

html - 设置表头和填充数据; Rails 和 SLIM

sql - 在 PostgreSQL 中发现表的行数的快速方法

sql - GBQ 窗函数 AND 算术运算

sql - Google BigQuery <EOF> 中的错误

mysql - 删除具有外键约束的行

java - PostgreSQL。通过具有特定 ID 的属性列表搜索值

c++ - 使用 libpqxx 批量加载数据

python - 使用 bq 命令行覆盖表