Я застрял в этом вопросе, и я хотел бы иметь руку.Два COUNT и GROUP BY
Итак, у меня есть две таблицы: курс и отсутствие.
Целью моего запроса является подсчет для ученика всех его курсов и пропусков за каждый месяц года.
Только с курсами, у меня есть этот запрос:
SELECT DATE_FORMAT(c.date, "%M") AS month,
COUNT(*) AS courses
FROM Course c
GROUP BY month
ORDER BY MONTH(c.date);
Результат выглядит следующим образом:
+-----------+--------+
| month | courses|
+-----------+--------+
| January | 24 |
| February | 20 |
| March | 20 |
| April | 22 |
| May | 23 |
| June | 20 |
| July | 23 |
| August | 22 |
| September | 20 |
| October | 23 |
| November | 23 |
| December | 21 |
+-----------+--------+
Я хотел бы иметь новую колонку, точно так же как курсы одного, но за отсутствия.
мое отсутствие столбцы: идентификатор, user_id, course_id, разум, оправдан
Таким образом, это можно использовать группу курсов с отсутствием рассчитывать?
Если да, то как?
Спасибо заранее,
EDIT:
У меня сейчас этот вопрос:
SELECT a.month, a.courses, b.absences
FROM (SELECT DATE_FORMAT(c.DATE, "%M") AS month,
COUNT(*) AS courses
FROM Course c
GROUP BY month) a
INNER JOIN (SELECT DATE_FORMAT(c.date, "%M") AS month,
COUNT(*) AS absences
FROM Absence a
LEFT JOIN Course c
ON a.course_id = c.id
GROUP BY month) b
ON a.month = b.month;
И результат:
+----------+---------+----------+
| month | courses | absences |
+----------+---------+----------+
| November | 23 | 2 |
| October | 23 | 1 |
+----------+---------+----------+
Номера хорошие, но когда нет пропусков, курсы не показаны. Есть ли способ иметь 0 на отсутствие?
EDIT 2:
Это рабочий вопрос:
SELECT a.month, a.courses, b.absences
FROM (SELECT DATE_FORMAT(c.DATE, "%M") AS month,
COUNT(*) AS courses
FROM Course c
GROUP BY month) a
LEFT JOIN (SELECT DATE_FORMAT(c.date, "%M") AS month,
COUNT(*) AS absences
FROM Absence a
LEFT JOIN Course c
ON a.course_id = c.id
GROUP BY month) b
ON a.month = b.month;
Хотите ли вы видеть его для всех студентов или вы укажете идентификатор студента в качестве параметра? –