首页 > 解决方案 > 如何计算 varchar 字段中的每个字符?

问题描述

需要获取字符和字符数。将首先报告具有最高字符数的字符。如何计算 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

标签: sqlpostgresql

解决方案


我会在这里使用日历表方法:

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) > 0

推荐阅读