SQL查询中有两个多行计数

时间:2014-04-25 14:13:45

标签: sql count

我有两个问题:

select m.name, count(distinct a.kursnr)
from trainer t
left outer join mitarbeiter m 
on t.svnr = m.svnr 
left outer join einzeltraining e 
on t.svnr = e.trainer
left outer join abhaltung a 
on t.svnr = a.trainer 
group by m.name, t.svnr;

select m.name, count(e.trainer)
from trainer t 
left outer join mitarbeiter m 
on t.svnr = m.svnr
left outer join einzeltraining e 
on e.trainer = t.svnr 
group by m.name, e.trainer;

第一个返回正确数量的课程(kursnr),第二个数字表示培训师掌握的正确个人课程数量(einzeltraining)。但是,我不能创建一个在一个表中显示这两个值的SQL语句。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

虽然可能有更有效的方法来实现这一点,但我想向您展示组合共享一个共同字段的任何两个查询的简单方法,例如:

select coalesce(q2.name, q1.name) As Name, q1.KursnrCount, q2.TrainerCount
from 
(   --original first query
    select m.name, count(distinct a.kursnr) as KursnrCount
    from trainer t
    left outer join abhaltung a 
    on t.svnr = a.trainer 
    left outer join mitarbeiter m 
    on t.svnr = m.svnr 
    left outer join einzeltraining e on svnr = e.trainer
    group by m.name, t.svnr
) q1
full join 
(   --original second query
    select count(e.trainer) as TrainerCount, m.name
    from trainer t 
    left outer join einzeltraining e 
    on e.trainer = t.svnr 
    left outer join mitarbeiter m 
    on t.svnr = m.svnr
    group by e.trainer, m.name
) q2 on q2.name = q1.name

您还可以使用内部联接或左联接,而不是完整联接,具体取决于这些查询中的名称字段的匹配方式。