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

Jak seskupit podle měsíce a vrátit nulu, pokud pro určitý měsíc neexistuje žádná hodnota?

Mějte tabulku všech měsíců a poté left join k vašemu stolu:

SELECT MONTHNAME(m.month) AS mName, 
    MONTH(m.month) AS mOrder, 
    ifnull(sum(amount),0) AS total_num 
from months m
left join income i
on m.month = i.date

GROUP BY mOrder 
ORDER BY mOrder DESC

Pokud nechcete vytvořit months tabulky, pak můžete:

(select STR_TO_DATE('01/01/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/02/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/03/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/04/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/05/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/06/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/07/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/08/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/09/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/10/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/11/2016', '%d/%m/%Y') as month union 
 select STR_TO_DATE('01/12/2016', '%d/%m/%Y') as month)


  1. Dynamické SQL výsledky do dočasné tabulky v SQL uložené proceduře

  2. Výhody NoSQL databází – Vše, co potřebujete vědět

  3. Uzamčení řádku v tabulce MYSQL během transakce

  4. Chyba MySQL:specifikace klíče bez délky klíče