当前位置: 代码迷 >> Sql Server >> My SQL语句,该如何解决
  详细解决方案

My SQL语句,该如何解决

热度:32   发布时间:2016-04-24 08:53:28.0
My SQL语句
有以下两段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试试吧。看看哪种对。
  相关解决方案