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

Hvordan grupperer man efter måned og returnerer nul, hvis der ikke er nogen værdi for en bestemt måned?

Få en tabel over alle måneder, og left join til dit bord:

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

Hvis du ikke ønsker at oprette en months tabel, så kan du:

(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. Har mysql det, der svarer til Oracles analytiske funktioner?

  2. Fejl java.lang.ClassNotFoundException:com.mysql.jdbc.Driver under kørsel af JAR via kommandolinjen

  3. SQL tæller specifik værdi over flere kolonner og rækker

  4. fejl i din SQL-syntaks .. nær 'nøgle'