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。那是因为我不想要它。唉,我只拿走了一半。