mysql - 计算另一个表中用户的一个表的行数

标签 mysql sql

我想创建一个项目列表查询,该查询将提供已注册应用程序的数量,不包括用户不存在的应用程序。 在这种情况下,考虑到用户10不存在,我的查询结果应该如下:

结果

 +----+------------+--------------+
    | id |  project   | applications |
    +----+------------+--------------+
    |  1 | MyProject1 |            3 |
    |  2 | MyProject2 |            0 |
    |  3 | MyProject3 |            0 |
    +----+------------+--------------+

表格

   Projects
+----+------------+
| id |    name    |
+----+------------+
|  1 | MyProject1 |
|  2 | MyProject2 |
|  3 | MyProject3 |
+----+------------+


applications
+----+------+------------+
| id | user | project_id |
+----+------+------------+
|  1 |    3 |          1 |
|  2 |    4 |          1 |
|  3 |    5 |          1 |
|  4 |   10 |          1 |
+----+------+------------+



users
+----+---------+
| id |  Name   |
+----+---------+
|  1 | Smith   |
|  2 | John    |
|  3 | Paul    |
|  4 | Chris   |
|  5 | Gabriel |
+----+---------+

以下查询不排除不存在的用户:

SELECT  `projects` . * , (

                                                                                SELECT COUNT( * ) 
                                                                                FROM  `applications` 
                                                                                WHERE  `applications`.`project_id` =  `projects`.`id` 
                                                                                AND EXISTS (
                                                                                SELECT  `applications`.`id` 
                                                                                FROM  `applications` ,  `users`,`project`
                                                                                WHERE  `application`.`user` =  `users`.`id` AND `applications`.`project_id` = `project`.`id`
                                                                                )
                                                                                )  AS `applications`
                                                                                FROM  `projects` ORDER BY `id` DESC LIMIT 30

最佳答案

我认为你想要左连接分组依据:

select p.id, p.name, count(u.id)
from projects p left join
     applications a
     on p.id = a.project_id left join
     users u
     on a.user_id = u.id
group by p.id, p.name;

但是,您可能需要考虑修复数据。似乎应用程序和项目以及应用程序和用户之间应该存在外键关系。能够拥有无效用户意味着与用户不存在有效的外键关系。

关于mysql - 计算另一个表中用户的一个表的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33692343/

相关文章:

mysql - 表示 er 图中 sql/mysql 的全部部分参与

sql - max() 与 ORDER BY DESC + LIMIT 1 的性能对比

sql - 按给定数量的行值分组

mysql - 为什么这个简单的连接查询使用子查询会明显更快?

mysql - 根据 SQL 中的俱乐部成员对俱乐部进行排序

C# Mysql不更新

MySQL FOUND_ROWS 和总行数

php - 针对 MySQL DATETIME 戳的时间比较检查

sql - 查找仅包含零的列

mysql - 如何标准化我的数据