【问题标题】:How to find distinct elements in a comma seperated line of string?如何在逗号分隔的字符串行中找到不同的元素?
【发布时间】:2019-06-05 07:51:02
【问题描述】:

我喜欢找到不同的元素并将它们排列在一行字符串中,使用标准 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 没有匹配的签名 类型:数组、字符串”

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

【问题讨论】:

    标签: google-bigquery


    【解决方案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    
    

    【讨论】:

      【解决方案2】:

      使用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),
          ','
      )
      

      给出想要的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 1970-01-01
        • 2013-11-03
        • 2016-04-24
        • 1970-01-01
        • 2018-10-17
        相关资源
        最近更新 更多