如何在sql中同时计数和选择?

时间:2019-03-10 11:55:31

标签: mysql sql

我有两个表usergroup,还有一个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过滤器所致)

3 个答案:

答案 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