首页 > 解决方案 > 如何在逗号分隔的字符串行中找到不同的元素?

问题描述

我喜欢找到不同的元素并将它们排列在一行字符串中,使用标准 SQL(BigQuery) 以逗号分隔。

我已经有一个像这样的字符串:

B,A,A,D,C,B

我喜欢生成:

A B C D

我试过使用STRING_AGG函数。

SELECT STRING_AGG(DISTINCT split(str,","), "," ORDER BY str ASC )  AS string_agg
FROM  UNNEST ( [(select f0_ from temp3 )]) AS str

我得到错误:

“参数类型的聚合函数 STRING_AGG 没有匹配的签名:ARRAY,STRING”

任何关于使用其他功能或改变结构的建议。

标签: google-bigquery

解决方案


以下是 BigQuery 标准 SQL

#standardSQL
CREATE TEMP FUNCTION STRING_DEDUP(str STRING) AS (
  (SELECT STRING_AGG(item ORDER BY item) FROM (
    SELECT DISTINCT item FROM UNNEST(SPLIT(str)) item 
  ))  
);
SELECT 
  STRING_DEDUP(str) `string_agg`
FROM `project.dataset.table`  

您可以使用虚拟数据进行测试,使用上面的示例,如下例所示

#standardSQL
CREATE TEMP FUNCTION STRING_DEDUP(str STRING) AS (
  (SELECT STRING_AGG(item ORDER BY item) FROM (
    SELECT DISTINCT item FROM UNNEST(SPLIT(str)) item 
  ))  
);
WITH `project.dataset.table` AS (
  SELECT 'B,A,A,D,C,B' str UNION ALL
  SELECT 'X,X,Z,Y,Y'
)
SELECT 
  STRING_DEDUP(str) `string_agg`
FROM `project.dataset.table`   

结果

Row string_agg   
1   A,B,C,D  
2   X,Y,Z    

推荐阅读