我有一个包含以下列的数据库视图(viewAll):
Locus,varchar(10)
MismatchDesc,varchar(200)
此表格如下:
Locus MismatchDesc
HLA-A 435delA;553insG
HLA-B 665subA;776subA;998delG
HLA-B 776subA;998delG
HLA-B 998delG
HLA-A 553insG
我需要使用其他列 MismatchCount 生成一个视图,使其看起来像:
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;
我曾希望它会使用偷偷摸摸的通配符和sum函数生成我所需的输出,但事实并非如此,它只是以比我刚才使用的更复杂的方式生成输出' 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
在某处,必须有一种方法来计算每个字符串的出现次数,以及每个匹配字符串的实例?
我无法将字符串分开,因为我需要将每个唯一的字符串实例作为一个整体来计算。我希望这是有道理的。
修改
我不仅限于执行查询的方式,如果有更有效,更快捷的方式,请分享,因为这是处理大量数据,因此可能非常慢。
答案 0 :(得分:1)
您可以使用相关查询来获取每个Locus的匹配计数,如下所示:
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