2017-04-15 39 views
1

我已经获得了这个MySQL模式Mysql Fiddle如何对所有行进行计数并为结果集中不存在的行返回0

GRPS      GRP_USRS 
grpID | name    usrID | grpID 
------------    -------------- 
1  | A     1  | 1 
2  | B     2  | 1 
3  | C     3  | 1 
4  | D     4  | 1 
5  | E     16 | 2 
          11 | 3 
          12 | 3 

我的目标是获取与总用户所有组数,包括0 事情是这样的:

grpID | count(*) 
-------------- 
1  | 4 
2  | 1 
3  | 2 
4  | 0 
5  | 0 

我想:

SELECT grps.grpID, IFNULL(COUNT(grp_usrs.usrID), 0) AS users 
FROM grps 
    INNER JOIN grp_usrs ON grps.grpID = grp_usrs.grpID 
GROUP BY grps.grpID ASC; 

,但它造成了:

grpID | count(*) 
-------------- 
1  | 4 
2  | 1 
3  | 2 

我如何包括它们,其计数为0

+0

不错,你提供了一个小提琴和格式化你的问题。 – trincot

+0

谢谢trincot :) –

回答

1

你几乎说得对。你应该使用左连接:

SELECT grps.grpID, COUNT(grp_usrs.usrID) AS users 
FROM grps 
LEFT JOIN grp_usrs ON grps.grpID = grp_usrs.grpID 
GROUP BY grps.grpID ASC; 
1

只需使用一个left join

SELECT grps.grpID, COUNT(grp_usrs.usrID) AS users 
FROM grps 
LEFT JOIN grp_usrs ON grps.grpID = grp_usrs.grpID 
GROUP BY grps.grpID ASC 

而你并不需要检查ifnull。另见this great explanation of joins

+0

谢谢你们..正确的答案! –

相关问题