在MySQL中使用GROUP BY在COUNT中包括零

时间:2018-09-24 18:22:41

标签: 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,则会得到相同的结果。

2 个答案:

答案 0 :(得分:4)

如果您想获得所有的才能;您加入JOIN的起始表格应该是教师表格。然后将Left相应地连接到另一个表上。

使用以下查询:

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`

答案 1 :(得分:0)

您需要重新查询,您的主表是教师(或使用右联接): 重要-由于您要计算个学生的情况,因此需要处理可能出现的NULL值,并加入students表:

SELECT
`f`.`id`, `f`.`name`, SUM(IF(s.id IS NULL, 0,1) `total`
FROM
faculty f
LEFT JOIN course c ON `f`.`id` = `c`.`faculty_id`
LEFT JOIN student s ON `c`.`id` = `s`.`course_id`
GROUP BY `c`.`faculty_id` ORDER BY `f`.`name`