Select from two tables with not direct relationship
The COUNT is too high, correct?  That is because the JOINs get more records before the GROUP BY comes along.  I suggest you remove the ORDER BY and SELECT more fields so you can see which rows are coming redundantly.  That may lead to splitting it into

SELECT ...
FROM ( SELECT person, COUNT(...) FROM ... JOIN ... ) X
JOIN some other tables


AND W.home_work_id IN (SELECT home_work_id FROM fixes GROUP BY home_work_id) 

optimizes very poorly; change it to yet another JOIN.  Why do you have the GROUP BY there?  Perhaps you meant DISTINCT?  Perhaps in this case, do

JOIN ( SELECT DISTINCT home_work_id FROM fixes ) Q ON Q.home_work_id = W.home_work_id