我有四个表:组,用户,投票,跟随。
这些表的结构是
基
g_id g_title g_content
1 t1 content1
2 t2 content2
用户
u_id u_groupid
1 1
2 1
3 2
4 2
5 2
票
v_id v_userid v_groupid v_votes
1 1 1 1
2 1 2 1
3 2 2 1
4 3 2 1
5 3 1 1
如下
f_id f_userid f_groupid
1 1 1
2 2 1
3 2 2
4 3 1
5 3 2
groups表记录了“group”的基本信息。
users表保持用户和组之间的关系,也就是说,如果用户A属于B组,那么用户表中就会有一条记录。
投票表表示用户对组持有的支持态度。
如果用户A对组A感兴趣,则在Follows表中添加一个条目。
现在我的问题是如何编写一个 select语句来查询每个组的用户数,投票数和关注者数。
我想查询结果喜欢这个
g_id num_users unm_votes num_followers
1 2 2 3
2 3 3 2
顺便说一句,我的数据库是Mysql 5.0.51b。
答案 0 :(得分:3)
如果你想要1个查询,这样的事情会帮助你
SELECT g_id,
d1.num_users,
d2.unm_votes,
d3.num_followers
FROM groups gg
LEFT JOIN (SELECT g_id,
COUNT(u.u_id) AS num_users
FROM groups g
LEFT JOIN users u
ON u.u_groupid = g.g_id
GROUP BY g_id) d1
ON d1.g_id = gg.g_id
LEFT JOIN (SELECT g_id,
COUNT(v.v_userid) AS unm_votes
FROM groups g
LEFT JOIN votes v
ON v.v_groupid = g.g_id
GROUP BY g_id) d2
ON d2.g_id = gg.g_id
LEFT JOIN (SELECT g_id,
COUNT(f.f_userid) AS num_followers
FROM groups g
LEFT JOIN follows f
ON f.f_groupid = g.g_id
GROUP BY g_id) d3
ON d3.g_id = gg.g_id
GROUP BY gg.g_id
答案 1 :(得分:0)
对于按组分组的用户数:
select g_id,count(u.uid) user_count from groups g, users u
where u.groupid = g.g_id
group by g_id
可能想要阅读分组。