BigQuery SQL - 基于条件的增量ID

时间:2017-08-30 12:41:01

标签: sql google-bigquery

我有一个排序表,其中一个字段包含true和false值。我想添加一个ID类型字段,每次出现一个真值时都会递增:

enter image description here

我该怎么做呢?我可以为组ID存储某种变量,还是需要以某种方式返回查询前一行?

2 个答案:

答案 0 :(得分:2)

消除相对较重的sum(case when ...) - 您可以使用countif,如下例

#standardSQL
SELECT *, COUNTIF(condition) OVER(ORDER BY pos) AS groupid
FROM `yourTable`     

你可以使用你的虚拟数据来玩这个,如下所示。

#standardSQL
WITH `yourTable` AS (
  SELECT TRUE AS condition, 1 AS `group`, 1 AS pos UNION ALL
  SELECT FALSE, 1, 2 UNION ALL
  SELECT FALSE, 1, 3 UNION ALL
  SELECT TRUE, 2, 4 UNION ALL
  SELECT FALSE, 2, 5 UNION ALL
  SELECT FALSE, 2, 6 UNION ALL
  SELECT FALSE, 2, 7 UNION ALL
  SELECT TRUE, 3, 8 UNION ALL
  SELECT FALSE, 3, 9 UNION ALL
  SELECT TRUE, 4, 10 UNION ALL
  SELECT TRUE, 5, 11 UNION ALL
  SELECT FALSE, 5, 12 UNION ALL
  SELECT FALSE, 5, 13 UNION ALL
  SELECT FALSE, 5, 14  
)
SELECT *, COUNTIF(condition) OVER(ORDER BY pos) AS groupid
FROM `yourTable`

答案 1 :(得分:1)

您可以使用sum窗口函数和case表达式来执行此操作。

select t.*,sum(case when condition='TRUE' then 1 else 0 end) over(order by somecolumn) as groupid
from tbl t