首页 > 解决方案 > 当标签是字符串数组时,如何计算 SQL 中每个标签的项目数?

问题描述

我有一个看起来像这样的表: ItemID, Tags

ItemID 是一个字符串,Tags 是一个字符串数组。

数据库引擎是 Presto:https ://prestodb.io/docs/0.172/index.html

我必须为每个标签返回一个 ItemID 的计数,但我有点卡住了。我的第一种方法是提取标签并创建一个唯一列表,然后我希望通过一些加入魔法我能够分组然后计数。

我应该如何处理这个?我对 SQL 数组没有太多经验

我也不知道如何使用 UNNEST 创建行,然后从中创建一个表:

SELECT filter(flatten(array_agg(split(tags, ','))), x -> x != '')
FROM my_items

这将返回一组唯一标签,显然使用 UNNEST 可以将其转换为一组行,但到目前为止我还没有运气将其转换为该行。尝试过类似的东西:

SELECT UNNEST(above subquery) FROM MY_ITEMS

标签: sqlpresto

解决方案


我认为你想要一个unnest()和聚合:

select t.tag, count(*)
from my_items i cross join
     unnest(split(i.tags, ',')) t(tag)
group by t.tag;

推荐阅读