Mysql
 sql >> Database >  >> RDS >> Mysql

restituisce zeri per date che non esistono MYSQL GROUP BY

In genere ottieni questo tipo di cose UNISCITI a una tabella dei valori , ovvero una tabella che contiene tutti i valori che ti interessano.

Le tabelle di valori tipiche possono contenere ad esempio tutti i valori interi compresi tra 0 e 1.000 o tutte le date per un determinato periodo. Spesso le tabelle Value includono più valori di quelli desiderati e otteniamo l'esatto output desiderato aggiungendo filtri nella clausola WHERE.

In questo caso avrai bisogno di una tabella di questo tipo che contenga le date. Supponendo che questa tabella sia denominata ValTableDates e che contenga tutte le date comprese tra gennaio 2005 e dicembre 2010, la query sarebbe simile a:

SELECT AVG(data) AS data, VT.ValDate
FROM ValTableDates VT
LEFT JOIN  table T ON T.dateReg = VT.ValDate
WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg) 
ORDER BY dateReg

La query precedente potrebbe richiedere un po' di modifiche per ottenere un valore Zero anziché NULL, ma il punto principale è che la tabella dei valori è in genere il modo più semplice per fornire record di output per i punti dati mancanti.
Un'alternativa consiste nell'usare una funzione/espressione che produce la sequenza [data] desiderata, all'interno di una sottoquery, ma questa è generalmente meno efficiente e più soggetta a errori.