Google bigquery 如何计算BigQuery中字符串中的重复值?

Google bigquery 如何计算BigQuery中字符串中的重复值?,google-bigquery,Google Bigquery,例如: 我有以下字符串: 201904,空白,201902,空白,空白,201811201810201809 如何计算一个接一个的“空白”重复值的数量? 在所描述的示例中,答案是2,但查询是什么? 提前谢谢你的帮助 下面是BigQuery标准SQL(带有快速简化的示例) 修正版 这里的想法是 提取连续空白的所有实例 将每个这样的实例拆分为空白元素数组 最后得到这些数组的最大长度 只是有些事情来得很快 重构版本 两者都有输出 Row value

例如: 我有以下字符串: 201904,空白,201902,空白,空白,201811201810201809 如何计算一个接一个的“空白”重复值的数量? 在所描述的示例中,答案是2,但查询是什么?
提前谢谢你的帮助

下面是BigQuery标准SQL(带有快速简化的示例)

修正版

这里的想法是

  • 提取连续空白的所有实例
  • 将每个这样的实例拆分为空白元素数组
  • 最后得到这些数组的最大长度
只是有些事情来得很快

重构版本

两者都有输出

Row value                                                                   max_repeated_count   
1   201904,BLANK,201902,BLANK,BLANK,201811,201810,201809,BLANK,BLANK,BLANK  3    
2   201904,BLANK,201902,BLANK,BLANK,BLANK,201811                            3    
3   201904,BLANK,201902,BLANK,201811,201902,BLANK,201811                    1
重构后的版本略有不同(但主要思想相同)

  • 它删除所有空格(假设空格不能是其他元素的一部分-如果可以-代码可以轻松调整)
  • 然后将所有连续的逗号项提取到数组中
  • 计算此类逗号序列的最大长度

也许我误解了,但您不能简单地按您要查找的值拆分并减去2(1表示第一个元素,1表示拆分后的元素计数):

declare t DEFAULT'201904,BLANK,201902,BLANK,BLANK,201811201810201809';
挑选
t作为字符串,
拆分(t,“空白”)为拆分字符串,
数组长度(拆分(t,'BLANK'))-2作为装入
n> 0-重复次数, 0-不重复,
-1-元素未找到

我不熟悉BigQuery,也不想显得粗鲁,但我想你可以通过搜索“BigQuery count”或“BigQuery count specific value”在谷歌上找到答案Leo,如果这是一件简单的事情,我不会花数小时搜索答案:)你建议搜索简单的计数,但问题是计算重复的值。我明白了。我把你的例子误解为米哈伊尔的全部结果。这几乎解决了问题,但有一些错误,例如:value='201904,BLANK,201902,BLANK,BLANK,BLANK,201811'预期结果:3当前结果:4 value='201904,BLANK,201902,BLANK,201811'预期结果:1当前结果:2如我所述-这是一个供您探索的快速想法-无论如何,请参阅更新-使用更正版本和新版本-稍微修改DexCellent!这是绝对正确的事情!非常感谢,米哈伊尔。使用我答案中的样本数据,比较结果/输出
#standardSQL
WITH `project.dataset.table` AS (
  SELECT '201904,BLANK,201902,BLANK,BLANK,201811,201810,201809,BLANK,BLANK,BLANK' value UNION ALL
  SELECT '201904,BLANK,201902,BLANK,BLANK,BLANK,201811' UNION ALL
  SELECT '201904,BLANK,201902,BLANK,201811,201902,BLANK,201811'
)
SELECT value, 
  (
    SELECT MAX(LENGTH(element) - 1) 
    FROM UNNEST(REGEXP_EXTRACT_ALL(REPLACE(value || ',', 'BLANK', ''), r',+')) element
  ) max_repeated_count
FROM `project.dataset.table`    
Row value                                                                   max_repeated_count   
1   201904,BLANK,201902,BLANK,BLANK,201811,201810,201809,BLANK,BLANK,BLANK  3    
2   201904,BLANK,201902,BLANK,BLANK,BLANK,201811                            3    
3   201904,BLANK,201902,BLANK,201811,201902,BLANK,201811                    1