问题描述
数据库引擎是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
解决方法
我认为您需要unnest()
和聚合:
select t.tag,count(*)
from my_items i cross join
unnest(split(i.tags,',')) t(tag)
group by t.tag;
,
不太确定,因为我还无法在Presto上尝试。但是cardinality
函数可能会起作用。
cardinality(x) → bigint -- Returns the cardinality (size) of the array x.
来自Presto文档-https://prestodb.io/docs/current/functions/array.html