mysql - COUNT 正在计算 LEFT JOIN 上不存在的内容。为什么?

标签 mysql sql

我遇到了问题。

我有一张名为 usersbycourse 的表,它显示了以下信息:

+------------+-----------------+--------+-----------+-------+-----------------+-----------------+
| instanceid | shortname       | userid | firstname | logid | lastaccessdelta | modulesfinished |
+------------+-----------------+--------+-----------+-------+-----------------+-----------------+
|          2 | PJU             |     74 | Robin     |   766 |         1662246 |               0 |
|          3 | Fundgest-GRHN1A |     75 | Batman    |   867 |         1576725 |               0 |
|          3 | Fundgest-GRHN1A |     77 | Abigobeu  |  1004 |          610480 |               0 |
+------------+-----------------+--------+-----------+-------+-----------------+-----------------+

和这个 SQL:

SELECT
mdl_course.id,
mdl_course.shortname,
COUNT(CASE WHEN usersbycourse.modulesfinished = 1 THEN NULL ELSE 1 END) AS studentcount
FROM mdl_course LEFT JOIN usersbycourse ON mdl_course.id = usersbycourse.instanceid
GROUP BY mdl_course.id;

SQL 的结果是:

+----+-----------------+--------------+
| id | shortname       | studentcount |
+----+-----------------+--------------+
|  1 | Unity I         |            1 |
|  2 | PJU             |            1 |
|  3 | Fundgest-GRHN1A |            2 |
|  4 | asdzxc2         |            1 |
+----+-----------------+--------------+

但是为什么?在 SQL 内部没有 Unity I,也没有 asdzxc2。我如何产生这样的结果:

+----+-----------------+--------------+
| id | shortname       | studentcount |
+----+-----------------+--------------+
|  1 | Unity I         |            0 |
|  2 | PJU             |            1 |
|  3 | Fundgest-GRHN1A |            2 |
|  4 | asdzxc2         |            0 |
+----+-----------------+--------------+

?

编辑:

我只想计算 modulesfinished = 0 的行

最佳答案

你要找的是SUM而不是COUNT,即

SELECT
mdl_course.id,
mdl_course.shortname,
SUM(CASE WHEN usersbycourse.modulesfinished = 0 THEN 1 ELSE 0 END) AS studentcount
FROM mdl_course LEFT JOIN usersbycourse ON mdl_course.id = usersbycourse.instanceid
GROUP BY mdl_course.id;

关于mysql - COUNT 正在计算 LEFT JOIN 上不存在的内容。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43081287/

相关文章:

mysql - 为什么mysql允许外键引用复合主键的一部分?

java - 如何识别哪个字段导致异常

mysql - 对多列进行分组和求和

sql - SQL Server 中几何点的中心或质心

Mysql需要根据两列值选择行范围

php - MySQL 查询更新不正确

php - 如何从函数中获取正确的最大 id 和最小 id?

php - 我可以在 XAMPP 上管理我的数据库,但无法通过其他方式访问它

sql - 如何查询最后 3 次出现的所有行的平均数据

mysql - 在特定列上应用自动增量 1 时出错