mysql - mysql中如何统计某个字符串出现的次数

标签 mysql regex count sum

我有一个包含这些列的数据库 View (viewAll):

轨迹,varchar(10)
不匹配描述,varchar(200)

该表可能如下所示:

Locus MismatchDesc
HLA-A 435delA;553insG
HLA-B 665subA;776subA;998delG 
HLA-B 776subA;998delG
HLA-B 998delG
HLA-A 553insG

我需要生成一个带有附加列MismatchCount的 View ,使其看起来像:

Locus MismatchDesc MismatchCount
HLA-A 435delA;553insG 1
HLA-B 665subA;776subA;998delG 1 
HLA-B 776subA;998delG 1
HLA-B 998delG 3
HLA-A 553insG 2

目前我有:

CREATE VIEW mismatchCount AS SELECT Locus, MismatchDesc, SUM(IF('%'+MismatchDesc+'%',1,0)) AS MismatchCount FROM viewAll GROUP BY MismatchDescGDNA ORDER BY mismatchCount ASC;

我曾希望它能使用偷偷摸摸的通配符和求和函数生成我所需的输出,但事实并非如此,它只是以比我刚刚使用“count”更复杂的方式生成输出。

因此当前会产生输出:

Locus MismatchDesc MismatchCount
HLA-A 435delA;553insG 1 
HLA-B 665subA;776subA;998delG 1 
HLA-B 776subA;998delG 1
HLA-B 998delG 1
HLA-A 553insG 1 

在某个地方,一定有一种方法可以计算每个字符串的出现次数以及每个与字符串匹配的实例?

我无法分隔字符串,这些字符串是用分号分隔的,因为我还需要将每个唯一的字符串实例作为一个整体进行计数。我希望这是有道理的。

编辑

我不限于我执行查询的方式,如果有更有效、更快的方式,请分享,因为这是要处理大量数据,因此可能很慢。

最佳答案

您可以使用相关查询来获取每个轨迹的匹配计数,如下所示:

CREATE VIEW mismatchCount AS
SELECT s.Locus,
       s.MismatchDesc,
       (select count(*) from YourTable t
       WHERE t.MismatchDesc like concat('%',s.mismatchDesc,'%') as MismatchCount
FROM YourTable s

或者使用连接:

CREATE VIEW mismatchCount AS
SELECT s.Locus,
       s.MismatchDesc,
       count(case when t.MismatchDesc like concat('%',s.mismatchDesc,'%') then 1 end) as MismatchCount
FROM YourTable s
INNER JOIN YourTable t ON(1=1)
GROUP BY s.locus,s.mismatchDesc

关于mysql - mysql中如何统计某个字符串出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35697217/

相关文章:

sql 对另一列中特定日期之前的调用次数进行计数/求和

mysql - Paperclip::Error(处理缩略图时出错

mysql - 如何查看slave是否开始与master进行复制以及复制状态如何?使用mysql db完成了多少?

c# - 用于删除单行 SQL 注释的正则表达式 (--)

Java 正则表达式不适用于特殊字符

mysql - 选择并计算同一查询中的行?

mysql - 在 MySQL 中处理事件

mysql - 将列值替换为其他列中的值

正则表达式检查第一个子文件夹是否为 "print"

MySQL 计数登录并返回最新登录