Mysql 如何在sql中同时计算和选择where?

Mysql 如何在sql中同时计算和选择where?,mysql,sql,Mysql,Sql,我有两个表user和group,还有一个usergroup作为链接表,其中包含组中存在的用户 要选择特定用户所在的组,我只需 SELECT * FROM usergroup INNER JOIN user ON user.id = group.user_id WHERE user.id = ? 获取包含用户链接的用户组记录列表 但如何同时获得同一组中其他用户的数量呢 在选择组信息时,我尝试了以下方法 SELECT group.*, count(usergroup.*) group_co

我有两个表
user
group
,还有一个
usergroup
作为链接表,其中包含组中存在的用户

要选择特定用户所在的组,我只需

SELECT * 
FROM usergroup 
INNER JOIN user 
ON user.id = group.user_id 
WHERE user.id = ?
获取包含
用户链接的
用户组
记录列表

但如何同时获得同一
组中其他用户的数量呢

在选择
信息时,我尝试了以下方法

SELECT group.*, count(usergroup.*) group_count 
FROM usergroup 
INNER JOIN user 
ON user.id = group.user_id 
WHERE user.id = ? 

但是它总是计算
1
(可能是因为
WHERE user.id
过滤器)

如果要计算用户1所在的组的大小,则可以执行以下操作:

select ug.group_id, count(*) as num_users
from usergroups ug 
group by ug.group_id
having sum( ug.user_id = 1 ) > 0;  -- has user 1

您可能需要一个相关的子查询

drop table if exists u,ug;
create table u(id int);
create table ug (gid int,uid int);

insert into u values
(1),(2),(3);

insert into ug values
(1,1),(1,2),(1,3),
(2,2),(2,3),
(3,3);

select u.*,ug.gid,(select count(*) - 1 from ug ug1 where ug1.gid = ug.gid) others
from u
join ug on ug.uid = u.id;

+------+------+--------+
| id   | gid  | others |
+------+------+--------+
|    1 |    1 |      2 |
|    2 |    1 |      2 |
|    3 |    1 |      2 |
|    2 |    2 |      1 |
|    3 |    2 |      1 |
|    3 |    3 |      0 |
+------+------+--------+
6 rows in set (0.00 sec)
此查询:

select group_id from usergroup where user_id = 1
select group_id, count(*) - 1 otherusers
from usergroup
where group_id in (
  select group_id from usergroup where user_id = 1
)
group by group_id
返回
user\u id=1
所属的所有组。
因此,您可以在此查询中使用它:

select group_id from usergroup where user_id = 1
select group_id, count(*) - 1 otherusers
from usergroup
where group_id in (
  select group_id from usergroup where user_id = 1
)
group by group_id

请参见

我不清楚您的要求。请在您的问题中添加一些示例数据。@TimBiegeleisen我需要从
user
usergroup
表中进行选择,以“查找特定用户所在的组列表”。同时,我还需要计算每个组中的用户总数。一个用户可以在多个组中。如果您以文本形式提供示例数据和预期输出,则速度会快得多。您的第二个查询无效。FROM子句中没有选择
组的
表。*
@P.Salmon。那是因为我不想要它。唉,我只拿走了一半。