sql >> データベース >  >> RDS >> Mysql

空の月を含む月ごとのグループ化

    これを行う1つの方法は、連続する月でいっぱいのテーブルを作成してデータを入力することです。

    その後、OUTER JOIN そのテーブルを使用します。

    つまり、次のようなものです:

    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 Oudejaarsavondに対して何かあるかどうかはわかりませんが、12月には31日あります;-)



    1. REDOロググループとファイルとメンバーの理解

    2. vb.net、mysqlを使用してテーブルを作成する

    3. MySQLWorkbenchからlimit句を削除します

    4. フィールドリストの列'user_id'があいまいです