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名成员的组,并且列出了每个组的总成员数
但是,我不确定为什么查询中没有引用joingrpmembs2
。但是,如果我删除该连接,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在某种程度上相互抵消了。只是我的直觉。