首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算varchar字段中的每个字符?

如何计算varchar字段中的每个字符?
EN

Stack Overflow用户
提问于 2018-11-16 05:46:00
回答 2查看 72关注 0票数 2

需要得到字符和字符计数。字符计数最高的字符将首先报告。如何计算varchar字段中的每个字符?

代码语言:javascript
复制
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');

我所期望的

代码语言:javascript
复制
a 2
b 2
c 2
d 2
e 1
f 1
g 1
m 1

我写了一个只收到一个字母的查询

代码语言:javascript
复制
SELECT 
 sum( 
    ROUND (   
        (
            LENGTH(value)
            - LENGTH( REPLACE ( value, 'a', '') ) 
        ) / LENGTH('a')        
    )) AS a    
FROM name
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-16 06:29:54

可以使用string_to_array()和unnest创建所有字符的列表,然后对结果进行分组:

代码语言:javascript
复制
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

在线示例:https://rextester.com/JXYR32728

票数 1
EN

Stack Overflow用户

发布于 2018-11-16 05:49:15

我想在这里采用日历表的方法:

代码语言:javascript
复制
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;

Demo

请注意,这报告所有字母在字母表,即使他们有一个零计数。如果您只想看到正计数,那么将以下内容添加到查询的末尾:

代码语言:javascript
复制
HAVING COUNT(t2.name) > 0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53332103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档