使用 SPLIT()
& NTH()
,我正在拆分字符串值,并将第二个子字符串作为结果 . 然后我想对结果进行分组 . 但是,当我将SPLIT()与GROUP BY结合使用时,它会不断给出错误:
Error: (L1:55): Cannot group by an aggregate
结果是一个字符串,为什么不能对它进行分组?
例如,这可以工作并返回正确的字符串:
SELECT NTH(2,SPLIT('FIRST-SECOND','-')) as second_part FROM [FOO.bar] limit 10
但是然后对结果进行分组不起作用:
SELECT NTH(2,SPLIT('FIRST-SECOND','-')) as second_part FROM [FOO.bar] GROUP BY second_part limit 10
4 回答
我最好的猜测是你可以通过使用子查询获得相同的结果 . 就像是 :
我想,系统在内部以聚合方式返回Nth
如果只有2个值由分隔符分隔,那么更简单的方法是使用REGEXP_EXTRACT:
我喜欢大卫的答案 - 有时使用RegEx可能会让分裂更加复杂 . 从split命令中提取第一个选项,然后GROUPing BY是一个非常常见的操作 . 我通常在BigQuery中执行此操作的方式是使用REGEXP_EXTRACT,如下所示:
在这个简单的例子中,“splitme”列是以管道分隔的(|) .
这意味着,将字符串从“splitme”的开头提取到第一次出现的管道(|) . “(?U)”是re2 RegEx引擎语法中的“非贪婪”匹配标志 . 如果没有此标志,如果有多个管道分隔值,则此RegEx将匹配最后一个管道之前的所有内容 .
在我的练习中,我通常使用类似下面的内容,其中N是“list”中的值数,以便跳过 .
所以,如果我对列表中的第三个值感兴趣,我将使用:
关于re2语法的更多细节here