我有一个包含这些列的数据库 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/