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

Grupper for måned inklusive tomme måneder

En måde at gøre dette på er at oprette og udfylde en tabel fuld af på hinanden følgende måneder.

Du kan derefter OUTER JOIN ved at bruge den tabel.

Så noget i stil med:

drop table if exists all_months;

create table all_months (a_month_id int unsigned PRIMARY KEY,a_month varchar(20) NOT NULL, UNIQUE KEY `all_months_uidx1` (a_month));

insert into all_months values (1,'January');
insert into all_months values (2,'February');
insert into all_months values (3,'March');
insert into all_months values (4,'April');
insert into all_months values (5,'May');
insert into all_months values (6,'June');
insert into all_months values (7,'July');
insert into all_months values (8,'August');
insert into all_months values (9,'September');
insert into all_months values (10,'October');
insert into all_months values (11,'November');
insert into all_months values (12,'December');

SELECT SUM(IFNULL(t1.VerkoopfactBedrag,0)) AS bedrag, 
am.a_month AS date
from
(
select
ifnull(vn.VerkoopfactBedrag,0) as VerkoopfactBedrag,
cast(DATE_FORMAT(VerkoopfactDatum, '%M') as char) as mdate
FROM verkoopfacturen vn
WHERE Verkoopfact_UserId = 12 
AND VerkoopfactDatum BETWEEN '2011-01-01' AND '2011-12-31' 
GROUP BY DATE_FORMAT(VerkoopfactDatum, '%M')
) t1 RIGHT OUTER JOIN all_months am on t1.mdate = am.a_month
group by am.a_month
order by a_month_id asc;

PS Ved ikke om du har noget imod Oudejaarsavond, men der er 31 dage i december;-)



  1. Er der nogle faldgruber/ting du skal vide, når du skifter fra MyISAM til InnoDB

  2. SQL Manglende højre parentes på rækkefølge efter sætning

  3. Primær nøgle med flere kolonner i MySQL 5

  4. Hvordan håndterer jeg åbning/lukning af Db-forbindelse i en Go-app?