每行SQL的唯一字符串

时间:2017-11-12 00:30:25

标签: sql google-bigquery

我有一个包含这样数据的表:

colA | animals
1    | horse, mouse
2    | dog,cat,dog
3    | cat, rat
4    | rat, rat, bug

我希望输出如下所示,我想遍历每一行,只获取唯一值。

colA | animals
1    | horse, mouse
2    | dog,cat
3    | cat, rat
4    | rat, bug

我知道distinct是列中的所有不同值,但不知道如何为每行执行此操作。有没有可以做到的命令?

1 个答案:

答案 0 :(得分:1)

以下是BigQuery Standard SQL

  
#standardSQL
SELECT 
  colA, 
  (
    SELECT STRING_AGG(DISTINCT TRIM(animal), ',')
    FROM UNNEST(SPLIT(animals)) animal
  ) animals
FROM `project.dataset.table`
-- ORDER BY colA   

您可以使用问题中的虚拟数据来测试/播放上面的内容:

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 colA, 'horse, mouse' animals UNION ALL
  SELECT 2, 'dog,cat,dog' UNION ALL
  SELECT 3, 'cat, rat' UNION ALL
  SELECT 4, 'rat, rat, bug'
)
SELECT 
  colA, 
  (
    SELECT STRING_AGG(DISTINCT TRIM(animal), ',')
    FROM UNNEST(SPLIT(animals)) animal
  ) animals
FROM `project.dataset.table`
-- ORDER BY colA  

输出如下

colA    animals  
1       horse,mouse  
2       dog,cat  
3       cat,rat  
4       rat,bug    

如果输出中不需要colA,则不要将其包含在SELECT

#standardSQL
SELECT 
  (
    SELECT STRING_AGG(DISTINCT TRIM(animal), ',')
    FROM UNNEST(SPLIT(animals)) animal
  ) animals
FROM `project.dataset.table`     

同样在不需要colA的情况下 - 以下版本也可以使用

#standardSQL
SELECT 
  STRING_AGG(DISTINCT TRIM(animal), ',') distinct_animals
FROM `project.dataset.table`, UNNEST(SPLIT(animals)) animal
GROUP BY animals