MySQL连接表用于具有多个条件的计数

时间:2016-12-12 14:54:51

标签: mysql

尝试在3个表格中创建报告 - 公司,帐户,用户。对于每个公司,帐户中都有一个ID。每个用户都有一个帐户。我可以轻松地获得总数,但我需要添加总数中注册用户数的计数(用户名不为空)。

SELECT c.c_name, c.c_groupnumber, count(a.a_userid) AS TotalCount
FROM company c
LEFT JOIN account a ON c.c_groupnumber = a.a_groupnumber
WHERE a.a_deleted IS NULL
GROUP BY c.c_groupnumber
HAVING TotalCount > 0;

如何在保持我的TotalCount的同时添加一个条件,让我计算user.u_username不为空?帐户和用户之间的链接是

a.a_userid = user.u_userid

tbl.company
c_id, c_groupnumber, c_name
  1    1234          widgets, inc.
  2    5678          joe's garage

tbl.user
u_userid, u_username, u_name
  1        bill       Bill Smith
  2        frank      Frank Johnson
  3        NULL       Jane Doe
  4        mary       Mary Stack
  5        NULL       Steve Spot

tbl.account
a_id, a_userid, a_groupnumber
 100       1      1234
 101       2      5678
 102       3      5678
 103       4      1234
 104       5      1234

所以使用上面非常简化的表格示例,公司“Widget's Inc.”有3名员工(账单史密斯,玛丽堆栈和史蒂夫点),其中3 2人已注册(账单和玛丽),而史蒂夫没有(用户名为空)。

乔的车库有两名员工 - 弗兰克和简,弗兰克已注册,而简没有。

我想生成类似这样的报告:

Group      Company     Total Emp      Reg Emp
1234       Widgets Inc     3              2
5678       Joe's Garag     2              1

希望这会使问题更清楚?

1 个答案:

答案 0 :(得分:0)

如果您获得了用户名,然后使用

执行JOIN,该怎么办?
SELECT c.c_name, c.c_groupnumber, count(a.a_userid) AS TotalCount,
xxx.username_count
FROM company c
LEFT JOIN account a ON c.c_groupnumber = a.a_groupnumber
LEFT JOIN ( select u_userid, count(u_username) username_count
            from `user`
            group by u_userid ) xxx ON a.a_userid = xxx.u_userid
WHERE a.a_deleted IS NULL
GROUP BY c.c_groupnumber
HAVING TotalCount > 0;