【问题标题】:Cumulative sum value 1 and reset sum when meet 0 SQL累积和值 1 遇到 0 SQL 时重置和
【发布时间】:2018-11-16 05:18:28
【问题描述】:

我正在尝试以下查询,但它不起作用。

 SELECT *,
   CASE WHEN x = 1 
   THEN ROW_NUMBER() OVER(PARTITION BY id ORDER BY date)  
   ELSE 0 END AS y

预期结果:

  x   y
  1   1
  1   2
  1   3
  0   0
  1   1
  1   2

我怎样才能做到这一点?我仍然想在 y 列中保留 0

【问题讨论】:

  • date 是什么,我看不到。
  • 嗨日期和 id 只是用于参考,但点是由 x 列计算到新列 y :)

标签: sql google-bigquery cumulative-sum


【解决方案1】:

计算每个值之前的零个数,然后使用它进行分组。最终枚举使用row_number()

select t.*,
       (case when x = 0 then 0
             else row_number() over (partition by x, grp order by date)
        end) as y
from (select t.*, countif(x = 0) over (order by date) as grp
      from t
     ) t

【讨论】:

  • 谢谢,我是 sql 新手,你能解释一下计算每个值之前的零个数吗?或者告诉我在哪里可以找到它:)
  • @SitsawekSukorn 。 . .这不是 SQL,是英文,是零值行数的累积总和。
  • 非常感谢我在行号后将负1重置为0
猜你喜欢
  • 2018-10-27
  • 1970-01-01
  • 2022-06-10
  • 2021-03-26
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多