sql - 如何计算 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
解决方案
我会在这里使用日历表方法:
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
推荐阅读
- c++ - 如何使用类c++的线程成员变量
- c++ - 我通过迭代加法和检查单个字符(参见代码)将二进制数转换为十进制的方法有什么问题?
- vim - 如何在不进入插入模式的情况下用鼠标选择文本
- c++ - std::variant 和不完整类型:它是如何工作的?
- google-apps-script - 如何提高创建 60 张纸的应用脚本的性能?
- java - Java:找不到符号“file.asm”.split(“.”)
- c++ - 在Linux机器上使用cmake Qt5 Webkit进行C ++交叉编译,使用mingw针对Windows,失败
- oracle - 如何在 oracle 云应用程序上创建帐户?
- javascript - 关闭模式后如何保存复选框选中状态?
- php - php文件有什么问题?Wordpress/Woocommerce 中的致命错误