需要得到字符和字符计数。字符计数最高的字符将首先报告。如何计算varchar字段中的每个字符?
CREATE TABLE name(
id SERIAL PRIMARY KEY,
value TEXT
);
INSERT INTO name (value) VALUES ('abcd');
INSERT INTO name (value) VALUES ('abcd efg');
INSERT INTO name (value) VALUES ('m');我所期望的
a 2
b 2
c 2
d 2
e 1
f 1
g 1
m 1我写了一个只收到一个字母的查询
SELECT
sum(
ROUND (
(
LENGTH(value)
- LENGTH( REPLACE ( value, 'a', '') )
) / LENGTH('a')
)) AS a
FROM name发布于 2018-11-16 06:29:54
可以使用string_to_array()和unnest创建所有字符的列表,然后对结果进行分组:
select t.c, count(*)
from name, unnest(string_to_array(value,null)) as t(c)
where t.c <> ' '
group by t.c
order by count(*) desc发布于 2018-11-16 05:49:15
我想在这里采用日历表的方法:
SELECT
t1.letter,
COUNT(t2.name) AS cnt
FROM
(
SELECT 'a' AS letter UNION ALL
SELECT 'b' UNION ALL
SELECT 'c' UNION ALL
...
SELECT 'z'
) t1
LEFT JOIN names t2
ON t2.name LIKE '%' || t1.letter || '%'
GROUP BY
t1.letter
ORDER BY
t1.letter;
请注意,这报告所有字母在字母表,即使他们有一个零计数。如果您只想看到正计数,那么将以下内容添加到查询的末尾:
HAVING COUNT(t2.name) > 0https://stackoverflow.com/questions/53332103
复制相似问题