我有两张桌子,我正试图从中获取信息。
登录表 - 其中包含员工列表
项目表 - 包含项目
简而言之,我正在尝试编写一个查询,该查询将选择撰稿人并在每个上执行子查询,这将返回一个被称为“open_projects”的字段。这个,我可以使用下面的sql:
select web_login_id,
(select count(project_web_id) from project
where copywriter = web_login_id
and (`status` = 'open' or `status` = 'qual')) as open_projects from login
where roles like '%copywriter%'
and tierLevel like '%c1%'
order by open_projects asc
返回类似于:
的内容1982983 3
1982690 22
2987398 5
问题在于,有时候5个或6个项目属于同一个客户端,并且实际上并没有被处理,因为它们是以队列方式处理的。
我的问题是如何修改上面的sql,以便子查询将基于client_login_id字段的GROUP子集。
这个sql给出了一个错误:子查询返回超过1行
select web_login_id,
(select count(project_web_id) from project
where copywriter = web_login_id
and (`status` = 'open' or `status` = 'qual') group by client_login_id) as open_projects from login
where roles like '%copywriter%'
and tierLevel like '%c1%'
order by open_projects asc
答案 0 :(得分:0)
您需要将其重新表述为显式连接。我认为以下是诀窍:
select web_login_id, cw.open_projects
from login l left outer join
(select copywriter, count(project_web_id) as open_projects
from project
where `status` in ('open', 'qual')
group by copywriter
) cw
on l.web_login_id = cw.copywriter
where l.roles like '%copywriter%' and l.tierLevel like '%c1%'
order by open_projects asc
我不确定“group by client_login_id”是做什么的。这似乎没必要。
完成此操作后,您可以从子查询中返回任意数量的列。