如何聚合数组中特定值的计数 (SQL)?

How can I aggregate counts of specific values in an array (SQL)?

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

我希望获得的最终输出是每个值一行,其中一列用于值的名称和该值在该数组中的计数。

这是一个粗略的例子:

| 颜色组合(数组) |

| [红色]、[蓝色]、[黄色] |

| [蓝色]、[绿色]、[紫色] |

| [黄色]、[蓝色] |

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

| 颜色 | # of Times Found |

|黄色 | 2 |

|蓝色 | 2 |

|红色 | 1 |

|绿色 | 1 |

|紫色 | 1 |

任何见解都会非常有帮助(对 SQL 中的数组不是很熟悉),我开始制作一个 case 语句以查看它是否包含变量,然后为每个变量创建列,如果它包含 1s找到了,但是当我需要对找到的次数进行排序时,这对我没有多大帮助,因为我最终得到 90 列和 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