MySQL:获取组及其成员总数的列表

MySQL:获取组及其成员总数的列表,mysql,sql,Mysql,Sql,我有两个表组和组成员 groups有一列srno,该列是整数,是主键 group\u成员具有列group\u srno,该列是映射到表groups的srno的外键 group\u members还有一列member\u profile\u srno为整数 样本数据: 组有行: srno groupname 1 firstgroup 2 secondgroup 3 thirdgroup 4 fourthgroup group_srno me

我有两个表
组成员

groups
有一列
srno
,该列是整数,是主键

group\u成员
具有列
group\u srno
,该列是映射到表
groups
srno
的外键

group\u members
还有一列
member\u profile\u srno
为整数

样本数据:

有行:

srno    groupname
1       firstgroup
2       secondgroup
3       thirdgroup
4       fourthgroup
group_srno  member_profile_srno
1               147258
1               132678
1               551766
2               347799
2               556657
3               147258
3               365376
3               576252
3               682762
4               147258
4               465545
组成员
有行:

srno    groupname
1       firstgroup
2       secondgroup
3       thirdgroup
4       fourthgroup
group_srno  member_profile_srno
1               147258
1               132678
1               551766
2               347799
2               556657
3               147258
3               365376
3               576252
3               682762
4               147258
4               465545
我希望列出
中的所有行,这些行提供了
成员\u profile\u srno
是成员。在同一个查询中,我还希望获得列出的每个组的成员总数

因此,我的代码正在运行此查询(例如,
member\u profile\u srno
的值为147258):

这将返回我预期的结果

srno    groupname       grpmembrscount
1       firstgroup      3
3       thirdgroup      4
4       fourthgroup     2
我的意思是,我得到了所有拥有147258名成员的组,并且列出了每个组的总成员数

但是,我不确定为什么查询中没有引用join
grpmembs2
。但是,如果我删除该连接,
grpmembrscont
不会得到正确的值(所有行的值都是
1


知道为什么会发生这种情况吗?这是正确的方法吗?

除了不必要的
DISTICT
之外,这个查询非常好。在MySQLs中,它甚至可以通过模式使用
ONLY\u FULL\u GROUP\u


您需要第二个联接来生成正确的行数,这些行数要根据每个组中的成员数进行计数。无需在SELECT子句中引用
GRPMEMBS2
的任何列。但如果需要,可以使用
COUNT(grpmembrs2.group\u srno)
。对于
COUNT()
使用哪个列并不重要,只要它不包含任何空值。您也可以使用
COUNT(*)
并让优化器决定使用哪一列。

更新您的问题并添加适当的数据样本,预期结果请使用
DISTINCT
GROUP BY
,因为它看起来可疑且可能不必要。请给我们看一些数据。好的,我会在一段时间内用一些数据更新问题。谢谢此查询不遵循SQL Ansi定义,即选择列表中的所有列都必须在group by section中。只有MySql允许这种可能导致您的问题的丑陋的东西。连接
grpmembs2
没有任何作用,如果你把它取出来,它会给你带来错误的结果,那么你的查询从一开始就是错误的。@JorgeCampos我认为不必要的第二个连接和select distinct在某种程度上相互抵消了。只是我的直觉。