在子查询中加入

Join within a subquery

我需要在 count 子查询中使用连接。

这是我的代码,所以你可以看到我正在尝试做什么:

select verticals.name,
        (select count(*) from `leads` where `id_vertical` = verticals.id) as `unique_leads`,
        (select count(*) from `lead_history` where `id_vertical` = verticals.id) as `all_leads`,
        (select count(a.*) 
            from `assignments` as a
            left join `leads` as l on (l.id = a.id_lead)
            where l.id_vertical = verticals.id) as `assigned`
        from verticals

我收到语法错误,因为我猜我的查询完全不正确。正确的写法是什么?

我认为这应该可以修复错误:

select v.name,
       (select count(*) from `leads` where `id_vertical` = v.id) as `unique_leads`,
       (select count(*) from `lead_history` where `id_vertical` = v.id) as `all_leads`,
       (select count(*) 
        from `assignments` a left join
             `leads` l 
             on (l.id = a.id_lead)
        where l.id_vertical = v.id
       ) as `assigned`
from verticals v;

这也使用 table 别名(对于 verticals)——因此查询更易于编写和阅读。

使用连接提高查询性能。

select t.id,t.name,
count(a.id) as unique_leads,
count(b.id) as all_leads,
count(c.id) as assigned
from verticals t
inner join leads a on a.id_vertical = t.id
inner join lead_history b on b.id_vertical = t.id
inner join assignments c on a.id = c.id_lead
group by t.id,t.name