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

returnerer nuller for datoer, der ikke eksisterer MYSQL GROUP BY

Du opnår typisk denne type ting ved at JOIN-ing med en værditabel , altså en tabel, som indeholder alle de værdier, du er interesseret i.

Typiske værditabeller kan f.eks. indeholde alle heltalværdier mellem 0 og 1.000, eller alle datoer for en given periode. Ofte indeholder værditabellerne flere værdier end ønsket, og vi opnår det nøjagtige output, der ønskes ved at tilføje filtre i WHERE-sætningen.

I dette tilfælde vil du kræve en sådan tabel, som indeholder datoer. Hvis vi antager, at denne tabel hedder ValTableDates, og at den indeholder alle datoerne mellem januar 2005 og december 2010, vil forespørgslen se sådan ud:

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

Ovenstående forespørgsel kan kræve en smule justering for at få en værdi nul i stedet for NULL, men hovedpointen er, at værditabellen typisk er den enkleste måde at levere outputposter for manglende datapunkter.
Et alternativ er at bruge en funktion/udtryk, der producerer den ønskede [dato]-sekvens inde i en underforespørgsel, men dette er generelt mindre effektivt og mere udsat for fejl.




  1. SQL:grupper efter fra anden tabel og inverter resultatet

  2. udfylde to spinnere fra mysql-databasen, der er afhængige af hinanden

  3. Hvordan forespørger man enkelt og effektivt efter indlejrede relationer i SQL?

  4. Hent tidsstemplet for en fil ved hjælp af PL/SQL