我有如下表结构
leads
-id
-fname
-lname
subcontractors
-id
-leads_id
-fname
-lname
-status
潜在客户可以有多个分包商
。 subcontractors.status
告诉分包商是活跃还是暂停
问题是如何选择带有计数列的潜在客户,该列显示他们有多少活跃和暂停的子客户?
我现在有这个:
SELECT
l.id,
l.fname,
l.lname,
s.status
FROM leads l
INNER JOIN subcontractors s
ON l.id = s.leads_id
GROUP BY l.id ORDER BY l.id DESC;
我的目标是拥有这样的东西
id | fname | lname | active_subcon_count | suspended_subcon_count
最佳答案
您可以尝试使用条件聚合函数 COUNT
和 CASE WHEN
SELECT
l.id,
l.fname,
l.lname,
COUNT(CASE WHEN s.status = 'active' THEN 1 END) ,
COUNT(CASE WHEN s.status = 'suspended' THEN 1 END)
from leads l
INNER JOIN subcontractors s
ON l.id = s.leads_id
GROUP BY l.id , l.fname, l.lname
ORDER BY l.id DESC;
或者 mysql 可以像这样执行 SUM
。
SELECT
l.id,
l.fname,
l.lname,
SUM(s.status = 'active') active_subcon_count ,
SUM(s.status = 'suspended') suspended_subcon_count
from leads l
INNER JOIN subcontractors s
ON l.id = s.leads_id
GROUP BY l.id , l.fname, l.lname
ORDER BY l.id DESC;
关于MySQL 算作一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56420345/