如何为此问题编写SQL Select查询?

时间:2011-03-20 14:54:37

标签: mysql sql

我有四个表:组,用户,投票,跟随。

这些表的结构是

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。

2 个答案:

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

可能想要阅读分组。