Включить ноль в COUNT с GROUP BY в MySQL - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу сделать запрос в 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, я получаю те же результаты.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вам нужно раскрыть запрос, ваши основные таблицы - это факультеты (или используйте правое соединение): важно - так как вы хотите подсчитать случаи, когда ноль студентов, вам нужно лечить NULLзначения, которые могут появиться, присоединяясь к таблице студентов:

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`
0 голосов
/ 24 сентября 2018

Если вы хотите все способности;Ваш стартовый стол для 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`
...