有以下两段My SQL语句,若要将其合并在一起,该怎么写?
select fusions.name, count(test_run_assays.id) as num from fusions
LEFT JOIN clones on fusions.id = clones.fusion_id
LEFT JOIN test_runs on clones.id = test_runs.target_id and test_runs.target_class = 'clones'
LEFT JOIN test_types on test_runs.test_type_id = test_types.id
LEFT JOIN requests on test_runs.request_id = requests.id and requests.request_type_id = 10
LEFT JOIN test_run_assays on test_runs.id = test_run_assays.test_run_id and test_run_assays.sample_value >= test_run_assays.cutoff
where fusions.name like 'E1400%' and test_types.`name` = 'ELISA'
GROUP BY fusions.name
select fusions.name, count(test_runs.id) as num from fusions
LEFT JOIN clones on fusions.id = clones.fusion_id
LEFT JOIN test_runs on clones.id = test_runs.target_id and test_runs.target_class = 'clones'
LEFT JOIN test_types on test_runs.test_type_id = test_types.id
LEFT JOIN requests on test_runs.request_id = requests.id and requests.request_type_id = 10
where fusions.name like 'E1400%' and test_types.name = 'WB'
GROUP BY fusions.name
------解决思路----------------------
关联的表的个数都不同,怎么合并?假设你的关联语句都一样。想“把某个字段横过来汇总”(在你这的需求就是,如果你想要查的结果是:fusions.name,ELISA的计数,WB的计数。这种结果),那么做两件事:
where里去掉这个字段的筛选条件(即where条件只写:
where fusions.name like 'E1400%')
汇总用case:
select
fusions.name
, count( case test_types.`name` when 'ELISA' then test_run_assays.id else null end) as num1
, count(distinct case test_types.`name` when 'WB' then test_runs.id else null end) as num2
要说明的是,里面的distinct 关键字,是我猜测你的需求,test_run_assays 表跟前面的表是1对多的关系,你又想只计数test_runs.id而如果连第5张表test_run_assays的话,就会重复。那么用distinct来去重复。当然,如果我想的复杂了...你去掉distinct试试吧。看看哪种对。