在子查询中加入
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
我需要在 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