【问题标题】:How can I aggregate counts of specific values in an array (SQL)?如何聚合数组 (SQL) 中特定值的计数?
【发布时间】:2022-01-08 06:32:58
【问题描述】:

我有一个字段可以在一个数组中保存多达 15 个不同的值。可以为这些值存储大约 90 个不同的值。

我希望得到的最终输出是每个值都有一行,其中一列是值的名称和该数组中该值的计数。

这是一个粗略的例子:

| 颜色组合(数组) |

| [红色],[蓝色],[黄色] |

| [蓝色],[绿色],[紫色] |

| [黄色],[蓝色] |

所以我的目标是最终得到这样的输出:

| 颜色 | 找到的次数 |

|黄色 | 2 |

|蓝色 | 2 |

|红色 | 1 |

|绿色 | 1 |

|紫色 | 1 |

任何见解都会非常有帮助(对 SQL 中的数组不太熟悉),我首先创建一个 case 语句来查看它是否包含变量,然后为每个变量创建列,如果找到,则为 1,但这并没有'当我需要订购找到的次数时对我没有多大好处,因为我最终得到了 90 列和 1 行的总次数。

【问题讨论】:

    标签: sql amazon-web-services amazon-athena presto


    【解决方案1】:

    可以使用unnest扩展数组列:

    -- sample data
    WITH dataset (colors) AS (
        VALUES (array [ 'Red', 'Blue', 'Yellow' ]),
            (array [ 'Yellow', 'Orange' ]),
            (array [ 'Green' ])
    )
    
    --query
    select color, count(*) times
    from dataset
    cross join unnest (colors) t(color)
    group by color
    order by 2 desc -- to prettify output
    

    输出:

    color times
    Yellow 2
    Red 1
    Blue 1
    Orange 1
    Green 1

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 2019-01-09
      • 2017-01-28
      • 1970-01-01
      • 2015-07-07
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多