PostgreSQL 8.0.2统计数组列中字符串出现次数的问题
解决PostgreSQL 8.0.2中数组列的元素统计问题
你的问题根源在于PostgreSQL 8.0.2不支持JSON_TABLE——这个函数是PostgreSQL 12才引入的特性,而且8.0.2甚至早于原生JSON类型的支持(JSON类型在PostgreSQL 9.2才加入)。另外,8.0.2也没有unnest函数(该函数从8.4开始提供),所以需要用数组下标结合generate_series来展开数组。
假设你的表名为your_table,数组列是fruits_option(类型为text[]或其他数组类型),可以用以下查询统计每种水果的出现次数:
SELECT fruit, COUNT(*) AS fruit_count FROM ( SELECT fruits_option[i] AS fruit FROM your_table, generate_series(1, array_length(fruits_option, 1)) AS i -- 过滤空数组和数组中的NULL元素 WHERE fruits_option IS NOT NULL AND array_length(fruits_option, 1) > 0 AND fruits_option[i] IS NOT NULL ) AS unnest_fruits GROUP BY fruit ORDER BY fruit_count DESC;
说明:
array_length(fruits_option, 1)获取数组的长度(维度1的元素个数)generate_series(1, ...)生成从1到数组长度的连续整数,作为数组的下标fruits_option[i]通过下标取出数组中的每个元素- 外层查询对取出的元素分组并统计次数
如果你的数组类型不是text[],比如varchar[],只需要确保fruits_option[i]的类型能正确分组即可,不需要修改语法。
内容的提问来源于stack exchange,提问作者sourav kumar
相关产品推荐
相关产品推荐

