【问题标题】:Count FROM Another column MySQL从另一列 MySQL 计数
【发布时间】:2015-02-02 11:38:05
【问题描述】:

我的数据库中有两个表:

1.组

|------------|------------|------------|
|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           |
|------------|-------------|------------|------------|

谁能帮帮我?

谢谢你

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您需要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' 的组。

    【讨论】:

      【解决方案2】:

      我相信GROUP BY 会有所帮助。

      【讨论】:

      • 我试过这个,SELECT a.GroupId, GroupName, GroupDesc, COUNT(b.MemberUsername) as TotalMember FROM groups a, groupdetail b WHERE a.GroupId=b.GroupId AND MemberUsername = 'User004' AND GroupConfirmation = 'Joined' GROUP BY b.GroupId ORDER BY b.GroupId,但所有 TotalMember 列都有 1 个值
      • 看看你提供的数据,我猜那是准确的。请注意,您的查询中有 MemberUsername = 'User004',这意味着每个组中有 1 个名为 User004 的用户是正确的
      • 是的,你是对的,Gordon 告诉我使用 have 而不是 where 子句,谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多