首页 > 解决方案 > 在 MySQL 中使用 GROUP BY 在 COUNT 中包含零

问题描述

我希望在 MySQL 中进行查询,以列出所有院系及其学生人数,其表结构如下:

mysql表

我的查询看起来像:

SELECT `f`.`id`, `f`.`name`, COUNT(*) `total`
FROM `student` `s`
INNER JOIN `course` `c` ON `c`.`id` = `s`.`course_id`
LEFT JOIN `faculty` `f` ON `f`.`id` = `c`.`faculty_id`
GROUP BY `c`.`faculty_id`
ORDER BY `f`.`name`

我得到了这个结果:

查询结果

但我需要获得所有的学院,即使是那些没有注册学生的学院。

如果我对表使用 LEFT JOIN,course我会得到相同的结果。

标签: mysqlsqlgroup-bycount

解决方案


如果你想要所有的院系;您的 JOIN 起始表应该是教师表。然后相应地在另一张表上进行左连接。

使用以下查询:

SELECT `f`.`id`, `f`.`name`, COUNT(`s`.`id`) AS `total`
FROM `faculty` AS `f` 
LEFT JOIN `course` AS `c` ON `f`.`id` = `c`.`faculty_id` 
LEFT JOIN `student` AS `s` ON `c`.`id` = `s`.`course_id` 
GROUP BY `f`.`id`, `f`.`name` 
ORDER BY `f`.`name`

推荐阅读