我有两个表user
和group
,还有一个usergroup
作为链接表,其中包含组中存在的用户。
要选择特定用户所在的组,我可以这样做
SELECT *
FROM usergroup
INNER JOIN user
ON user.id = group.user_id
WHERE user.id = ?
获取包含到usergroup
的链接的user
条记录的列表
但是如何同时获得同一group
中其他用户的数量?
在选择group
信息时,我尝试了
SELECT group.*, count(usergroup.*) group_count
FROM usergroup
INNER JOIN user
ON user.id = group.user_id
WHERE user.id = ?
,但它始终计为1
(可能是由于WHERE user.id
过滤器所致)
答案 0 :(得分:0)
如果要计算用户1所在的组的大小,则可以执行以下操作:
lower
答案 1 :(得分:0)
您可能需要相关的子查询
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)
答案 2 :(得分:0)
此查询:
select group_id from usergroup where user_id = 1
返回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
请参见demo