mysql - 在 MySQL 中使用 GROUP BY 在 COUNT 中包含零

标签 mysql sql group-by count

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

mysql tables

我的查询如下:

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`

我得到了这个结果:

query result

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

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

最佳答案

如果你想要所有的院系; JOIN 的起始表应该是 faculty 表。然后相应地对另一个表进行左连接。

使用以下查询:

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`

关于mysql - 在 MySQL 中使用 GROUP BY 在 COUNT 中包含零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52485232/

相关文章:

MySQL 选择具有 LIMIT 的结果总和

c++ - 使用C的MySQL varchar中的编码字符缓冲区存储问题

触发器导致MySQL错误1109

mysql - SQL查找一天有最大记录

sql - 选择每个 GROUP BY 组中的第一行?

mysql - 选择mysql字段取决于其他字段值

mysql - 使用AVG对mysql查询结果进行排名

SQL - 创建月份第一天和月份名称的临时表或 CTE

sql - 基于一列对数据进行分组

sql - 按小时分组,汇总平均值