sql - Bigquery - 如何根据条件聚合数据
问题描述
我有一个如下所示的简单表格,其中包含产品、价格、成本和类别。价格和成本可以为空。
并且此表正在不时更新。现在我想每天按类别对表格内容进行汇总,看看在每个类别中,有多少没有价格的产品,有多少有价格,有多少产品的价格高于成本,因此结果表如下所示:
我想我可以通过在 bigQuery 中设置查询重新运行计划来每天运行一个查询,这样我就可以每天将三行数据附加到结果表中。
但问题是,我怎样才能得到这三行?我知道我可以分组,但我如何在非空、大于等条件下获得计数。
解决方案
您似乎想要窗口功能:
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;
推荐阅读
- python - Numpy:如何为每一列设置列[索引:] =值,用于不同索引的数组?
- azure - 如何在带有会话 ID 的 Azure 服务总线队列中发送和接收消息?
- python - Pyqt5 - QComboBox 在填充元素时非常慢
- python - 导出数据到excel,只得到最后一行
- python - 随着时间的推移验证连续条件
- javascript - 从 JSON 文件接收 JavaScript 对象后正确访问它
- c# - 画线不出现
- scala - spark scala 类型与 groupbykey 中的 zipwithIndex 不匹配
- fft - 对音频样本运行 FFT 后如何确定截止幅度?
- c++ - 如何正确地将 shared_pointer 传递给构造函数?