我有四个表:群组、用户、投票、关注。
这些表的结构是
群组
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
组表记录了一个“组”的基本信息。
users表保存了用户和组的关系,即如果用户A属于组B,那么user表中就会有一条记录。
票数表表示一个用户对一个群体的支持态度。
如果用户 A 对组 A 感兴趣,则在 Follows 表中添加一个条目。
现在我的问题是如何编写一个 select 语句来查询每个组的用户数、投票数和粉丝数。
我想要这样的查询结果
g_id num_users unm_votes num_followers
1 2 2 3
2 3 3 2
对了,我的数据库是Mysql 5.0.51b。
最佳答案
如果你想在 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
关于mysql - 如何为这个问题编写 SQL Select Query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5369209/