mysql只查找子查询中的唯一记录并显示计数

时间:2012-06-21 17:00:40

标签: mysql subquery

我有两张桌子,我正试图从中获取信息。

登录表 - 其中包含员工列表

项目表 - 包含项目

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

1 个答案:

答案 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”是做什么的。这似乎没必要。

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