从另一列MySQL算起

时间:2015-02-02 03:24:44

标签: mysql

我的数据库中有两个表:

1.groups

|------------|------------|------------|
|GroupId     |GroupName   |GroupDesc   |
|------------|------------|------------|
|3           |Group 3     |3rd Group   |
|5           |Group 5     |5th Group   |
|7           |Group 7     |7th Group   |
|9           |Group 9     |9th Group   |
|------------|------------|------------|

2.groupdetail

|------------|--------------|-----------------|
|GroupId     |MemberUsername|GroupConfirmation|
|------------|--------------|-----------------|
|3           |User001       |Pending          |
|3           |User002       |Joined           |
|3           |User003       |Joined           |
|3           |User004       |Joined           |
|5           |User001       |Joined           |
|5           |User004       |Joined           |
|7           |User004       |Joined           |
|------------|--------------|-----------------|

我希望能够从所选的MemberUsername中显示GroupId,GroupName,GroupDesc和TotalMember(来自他加入的每个组的总成员),并且他的GroupConfirmation已加入

我已成功选择GroupId,GroupName,GroupDesc使用:

SELECT a.GroupId, GroupName, GroupDesc
FROM groups a, groupdetail b
WHERE a.GroupId =b.GroupId
AND b.MemberUsername = 'user004'
AND b.GroupConfirmation = 'Joined'

但是我不知道我怎么能算出每个小组的总成员,我试过用     COUNT(b.MemberUsername),但结果只显示一行,

这是我想要获得的结果集示例(来自User004)

|------------|-------------|------------|------------|
|GroupId     |GroupName    |GroupDesc   |TotalMember |
|------------|-------------|------------|------------|
|3           |Group 3      |3rd Group   |4           |
|5           |Group 5      |5th Group   |2           |
|7           |Group 7      |7th Group   |1           |
|------------|-------------|------------|------------|

有人可以帮帮我吗?

谢谢你

2 个答案:

答案 0 :(得分:3)

您需要group bycount

SELECT g.GroupId, g.GroupName, g.GroupDesc, COUNT(*)
FROM groups g JOIN
     groupdetail gd
     ON g.GroupId = gd.GroupId
GROUP BY g.GroupId, g.GroupName, g.GroupDesc;

如果要计算所有成员,WHERE子句是多余的。如果您想要用户加入的组的总数,请添加以下having子句:

HAVING SUM(gd.MemberUsername = 'user004' AND gd.GroupConfirmation = 'Joined') > 0

这将仅按'user004'

过滤组

答案 1 :(得分:1)

我相信GROUP BY可能有所帮助。