0

我有两张表我想从中获取信息。

登录表 - 包含员工列表

项目表 - 包含项目

简而言之,我正在尝试编写一个查询,该查询将选择撰稿人并对每个撰稿人执行一个子查询,该子查询将返回一个名为“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
4

1 回答 1

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 

我不确定“按 client_login_id 分组”在做什么。似乎没有必要。

完成此操作后,您可以从子查询中返回任意数量的列。

于 2012-06-21T17:38:14.020 回答