如何聚合数组中特定值的计数 (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
我有一个字段可以在一个数组中容纳多达 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 |