我喜欢查找不同的元素并将它们排列在一行字符串中,并使用标准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”
关于使用其他功能或更改结构的任何建议。
答案 0 :(得分:1)
使用split
函数是一个好主意。它返回一个字符串数组,您可以对字符串进行排序并从中删除重复项。最后,如果要输出字符串,可以使用ARRAY_TOSTRING
函数。
将其全部放入,然后运行以下查询:
SELECT ARRAY_TO_STRING(
ARRAY(SELECT DISTINCT x FROM UNNEST(split('b,a,a,b,d,c')) AS x ORDER BY x),
','
)
给出期望的结果。
答案 1 :(得分:1)
以下是用于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