I'm stuck with this query and I would like to have a hand.
So I have two tables : Course and Absence.
The purpose of my query is to count, for a student, all his courses and absences for each months of the year.
With just the courses, I have this query :
SELECT DATE_FORMAT(c.date, "%M") AS month, COUNT(*) AS courses FROM Course c GROUP BY month ORDER BY MONTH(c.date); The result looks like this :
+-----------+--------+ | 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 | +-----------+--------+ I would like to have a new column, exactly like the courses one, but for the absences.
My Absence columns are : id, user_id, course_id, reason, justified
So, is this possible to use the courses group by with an absence count ?
If yes, how ?
Thanks in advance,
EDIT :
I have now this query :
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; And the result is :
+----------+---------+----------+ | month | courses | absences | +----------+---------+----------+ | November | 23 | 2 | | October | 23 | 1 | +----------+---------+----------+ The numbers are good, but when there are no absences, the courses are not shown. Is there a way to have a 0 on the absences ?
EDIT 2 :
This is the working query :
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;