mysql - 如何为这个问题编写 SQL Select Query?

标签 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

组表记录了一个“组”的基本信息。

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/

相关文章:

mysql - 从三个表中查询结果时遇到问题

mysql - 本地 IP 与环回的数据库访问速度?

mysql - 从内部联接内的子查询访问表 - MySql

sql - PostgreSQL - 添加 CONSTRAINT UNIQUE 并且不验证现有数据

mysql - SQL ORDER BY 两列,取大者

MySQL GROUP BY 和降序

php - 如何使用PHP和MYSQL将数据插入到两个不同的表中

java - sleep 连接-奇怪的增加

java - 如何从一个jsp页面过渡到另一个?

php - 复杂的 SQL 弄清楚如何提取最新数据