首页 > 解决方案 > Bigquery - 如何根据条件聚合数据

问题描述

我有一个如下所示的简单表格,其中包含产品、价格、成本和类别。价格和成本可以为空。

在此处输入图像描述

并且此表正在不时更新。现在我想每天按类别对表格内容进行汇总,看看在每个类别中,有多少没有价格的产品,有多少有价格,有多少产品的价格高于成本,因此结果表如下所示:

在此处输入图像描述

我想我可以通过在 bigQuery 中设置查询重新运行计划来每天运行一个查询,这样我就可以每天将三行数据附加到结果表中。

但问题是,我怎样才能得到这三行?我知道我可以分组,但我如何在非空、大于等条件下获得计数。

标签: sqlgroup-bygoogle-bigquerydata-analysisaggregation

解决方案


您似乎想要窗口功能:

select t.*
       countif(price is nuill) over (partition by date) as products_no_price,
       countif(price <= cost) over (partition by date) as products_price_lower_than_cost
from t;

date您可以在具有列的表上运行此代码。实际上,您不需要存储最后两列。

如果要将第一个表插入到第二个表中,则没有日期,您可以简单地使用:

select t.*
       countif(price is nuill) over () as products_no_price,
       countif(price <= cost) over () as products_price_lower_than_cost
from t;

推荐阅读