google-bigquery - 如何在逗号分隔的字符串行中找到不同的元素?
问题描述
我喜欢找到不同的元素并将它们排列在一行字符串中,使用标准 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”
任何关于使用其他功能或改变结构的建议。
解决方案
以下是 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
推荐阅读
- paypal - 具有多个定期订阅的贝宝只接受第一个
- javascript - 提取 Json 数据并使用 Protractor 验证值
- powerbi - SSAS 表格模型和 Power BI - 报表中的周筛选
- sql - 如何在报表生成器中合并行组?
- java - 如果需要更改库功能我该怎么办
- python - 尝试同时执行多个请求,然后使用 Aiohttp 和 python 添加到集合中
- azure - 通过 Microsoft graph api 将事件发布到组日历时出现持续 403 错误
- postgresql - 存储白名单客户的最佳数据库设计
- python - 如何分析sklearn-pipeline的中间步骤?
- php - 哪些 PHP 设置抑制“标头已发送”错误?