【问题标题】:Counter and running total / sum in BigQuery [closed]BigQuery中的计数器和运行总计/总和[关闭]
【发布时间】:2018-02-16 20:13:52
【问题描述】:

我在 Google Cloud BigQuery 中有一个包含两列的表:第一列是日期,第二列是布尔值。我按照日期排序。现在我只想再添加两列: 1. 只计算每行之前的行数:1,2,3,... 2.一个计算每行之前具有TRUE值的行数(True的运行总和)。 我如何在 SQL 中做到这一点? 以下显示了所有列以解释我的意思:

【问题讨论】:

  • 您在寻找 BigQuery 或 mySql 的解决方案吗?
  • 主要是BigQuery,但我想也许可以将一个解决方案修改为另一个。
  • @MikhailBerlyant 删除了冲突的标签,稍后可以添加适当的标签。
  • @user2725109 请分享您到目前为止尝试过的内容以及遇到问题的地方。
  • @shadow - 根据我的经验,当我看到冲突标签(sql、mysql、bigquery)的这种组合时,在 99.9% 的情况下意味着 bigquery :o)

标签: sql google-bigquery cumulative-sum


【解决方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '2018-01-01' dt, TRUE value UNION ALL
  SELECT '2018-01-07', FALSE UNION ALL
  SELECT '2018-01-09', TRUE UNION ALL
  SELECT '2018-02-02', TRUE UNION ALL
  SELECT '2018-02-19', FALSE UNION ALL
  SELECT '2018-03-02', FALSE UNION ALL
  SELECT '2018-03-09', FALSE UNION ALL
  SELECT '2018-04-28', TRUE
)
SELECT *,
  COUNT(1) OVER(ORDER BY dt) count_previous_all,
  COUNTIF(value) OVER(ORDER BY dt) count_previous_true
FROM `project.dataset.table`
ORDER BY dt   

结果为

Row dt          value   count_previous_all  count_previous_true  
1   2018-01-01  true    1                   1    
2   2018-01-07  false   2                   1    
3   2018-01-09  true    3                   2    
4   2018-02-02  true    4                   3    
5   2018-02-19  false   5                   3    
6   2018-03-02  false   6                   3    
7   2018-03-09  false   7                   3    
8   2018-04-28  true    8                   4    

【讨论】:

  • 很好的解决方案,谢谢!
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多