【问题标题】:Unique string from each row SQL每行 SQL 中的唯一字符串
【发布时间】:2023-04-04 12:15:01
【问题描述】:

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

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 是一列中的所有不同值,但不知道如何为每一行执行此操作。有什么命令可以做到吗?

【问题讨论】:

  • 永远不要在单列中存储多个值!
  • 我需要这种格式,因为我要运行 FPgrowth 算法。每行代表客户购买的产品。
  • @juergend 可能......但错误是学习过程的一部分。如果你不能给出建议,你可以完全忽略我的帖子,而不是完全粗鲁。
  • 我给了一个建议:改变你的数据库设计。而且我并不粗鲁。祝你好运。

标签: sql google-bigquery


【解决方案1】:

以下是 BigQuery 标准 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

【讨论】:

  • 是否可以不进行硬编码,因为我有几条记录?
  • 查看更新 - 希望你现在明白了 :o) - 你应该使用你的参考而不是 `project.dataset.table`
  • 非常感谢。我正试图摆脱我的 colA,但由于某种原因遇到了问题。我尝试不包括 colA 而是使用嵌套选择命令。你能编辑它以包括colA吗?非常感谢您的宝贵时间。
  • 包含还是不包含?请澄清
  • 太棒了!在我的回答中还可以看到另一个选项:o)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
相关资源
最近更新 更多