sql >> Databáze >  >> RDS >> Mysql

vrátí nuly pro data, která neexistují MYSQL GROUP BY

Tohoto typu obvykle dosáhnete připojením k tabulce hodnot , tedy tabulku, která obsahuje všechny hodnoty, které vás zajímají.

Typické tabulky hodnot mohou obsahovat například všechny celočíselné hodnoty mezi 0 a 1 000 nebo všechna data pro dané období. Tabulky hodnot často obsahují více hodnot, než je požadováno, a přesný požadovaný výstup získáme přidáním filtrů do klauzule WHERE.

V tomto případě budete potřebovat takovou tabulku, která obsahuje data. Za předpokladu, že se tato tabulka jmenuje ValTableDates a že obsahuje všechna data mezi lednem 2005 a prosincem 2010, bude dotaz vypadat takto:

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

Výše uvedený dotaz může vyžadovat trochu ladění, aby získal hodnotu nula namísto NULL, ale hlavním bodem je, že tabulka hodnot je obvykle nejjednodušším způsobem, jak poskytnout výstupní záznamy pro chybějící datové body.
Alternativou je použití funkce/výraz, který vytváří požadovanou sekvenci [datum] uvnitř dílčího dotazu, ale je obecně méně efektivní a náchylnější k chybám.




  1. jarní data JPA - mysql - findById() prázdné, pokud findAll() nebylo voláno dříve

  2. Sčítání součtu ze 2 různých tabulek

  3. Problém perských postav v databázi mysql

  4. SQL dotaz na datové intervaly