如何在SQL中统计字符串列表列中各不同字符串的出现次数
高效统计数组列中标签的出现次数
你现在手动替换标签名反复查询的方式确实太繁琐了,不仅效率低,还很容易漏掉某些标签。其实利用数据库自带的数组展开函数,就能一次性统计所有标签的出现次数,下面给你适配不同场景的解决方案:
PostgreSQL(适配你的表结构)
从你的表名public.content来看,应该是PostgreSQL环境,直接用unnest函数把数组拆成单独的行,再分组统计即可:
SELECT unnest(tags) AS tag, COUNT(*) AS count FROM "public"."content" GROUP BY tag ORDER BY count DESC;
语句说明:
unnest(tags)会把每个数组里的元素拆成独立的行,比如["pandas", "conda"]会变成两行数据,分别对应pandas和condaGROUP BY tag按标签分组,COUNT(*)统计每个标签的出现次数ORDER BY count DESC可以让结果按次数从多到少排序,方便快速查看热门标签
其他数据库的类似实现
如果是BigQuery这类支持数组的数据库,写法稍有不同,但核心逻辑一致:
SELECT tag, COUNT(*) AS count FROM "public"."content", UNNEST(tags) AS tag GROUP BY tag ORDER BY count DESC;
特殊情况处理
如果你的标签数组里存在行内重复(比如某条数据的tags是["conda", "conda"]),而你希望每个行里的标签只算一次(不管重复多少次),可以先对行内的标签去重再展开:
SELECT unnest(DISTINCT tags) AS tag, COUNT(*) AS count FROM "public"."content" GROUP BY tag ORDER BY count DESC;
这种方法只需要一次查询就能得到所有标签的统计结果,比你现在的方式高效太多,也不会遗漏任何标签~
内容的提问来源于stack exchange,提问作者user570104
相关产品推荐
相关产品推荐

