如何用SQL统计含指定字符的表条目数及按字符分组统计?
问题1:统计指定列中包含字符A、B、C的条目数量
先分两种常见场景给你方案,按需选择:
场景1:分别统计包含A、B、C的条目数(重复条目会被多次计数,比如同时含A和B的条目会在A、B的统计里各算一次)
假设你的表叫your_table,目标列是target_col,用UNION ALL结合COUNT就能实现:
SELECT 'A' AS Characters, COUNT(*) AS `COUNT(*)` FROM your_table WHERE target_col LIKE '%A%' UNION ALL SELECT 'B' AS Characters, COUNT(*) AS `COUNT(*)` FROM your_table WHERE target_col LIKE '%B%' UNION ALL SELECT 'C' AS Characters, COUNT(*) AS `COUNT(*)` FROM your_table WHERE target_col LIKE '%C%';
场景2:统计至少包含A、B、C中任意一个的总条目数(重复条目只算一次)
这种情况直接用OR关联过滤条件就行:
SELECT COUNT(*) AS total_matching_entries FROM your_table WHERE target_col LIKE '%A%' OR target_col LIKE '%B%' OR target_col LIKE '%C%';
问题2:统计格式为'A.B'类列中各字符的出现次数(按字符分组)
针对这种点分隔的双字符格式,核心思路是先把每个字符拆分开,再分别统计。用UNION ALL提取每个位置的字符,再聚合分组,就能得到你要的结果:
假设表名是your_table,目标列是target_col,SQL语句如下:
SELECT character AS Characters, COUNT(*) AS `COUNT(*)` FROM ( -- 提取点前面的第一个字符 SELECT SUBSTRING(target_col, 1, 1) AS character FROM your_table WHERE target_col REGEXP '^[A-Z]\\.[A-Z]$' -- 可选:只处理符合格式的条目 UNION ALL -- 提取点后面的第二个字符 SELECT SUBSTRING(target_col, 3, 1) AS character FROM your_table WHERE target_col REGEXP '^[A-Z]\\.[A-Z]$' -- 可选:只处理符合格式的条目 ) AS split_chars WHERE character IN ('A', 'B', 'C', 'D') -- 可选:只统计指定的几个字符 GROUP BY character ORDER BY character;
小说明:
SUBSTRING(target_col,1,1)取第一个字符,SUBSTRING(target_col,3,1)取第三个位置的字符(因为中间的点占了第二个位置)。UNION ALL会保留所有拆分后的字符,所以像'A.C'这样的条目,会被拆成'A'和'C',各自计入对应字符的统计数里。- 加的两个
WHERE条件是可选的,用来过滤掉不符合'A.B'格式的无效数据,避免影响统计结果。
执行这条SQL就能得到你预期的分组统计表格啦~
内容的提问来源于stack exchange,提问作者jsh6303
相关产品推荐
相关产品推荐

