Pode ser mais simples usar apenas GROUP BY e, em seu código real, adicionar as datas ausentes (ou iterar por todo o intervalo de datas e gerar um zero se a data estiver ausente nos resultados da consulta).
Nem tudo precisa ser resolvido em SQL, e muitas coisas são mais fáceis de resolver em outros lugares. :)