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

2つのテーブルからカウントを取得し、月ごとにグループ化

    月で両方のテーブルを結合します:

    SELECT MONTH(I.date) AS `month`
         , COUNT(I.ID) AS `countin`
         , COUNT(O.ID) AS `countOUT`
      FROM TableIN I
     LEFT JOIN TableOUT O
        ON MONTH(I.Date) = MONTH(O.Date)
     GROUP BY MONTH(I.date)
    UNION
    SELECT MONTH(O.date) AS `month`
         , COUNT(I.ID) AS `countin`
         , COUNT(O.ID) AS `countOUT`
      FROM TableIN I
     RIGHT JOIN TableOUT O
        ON MONTH(I.Date) = MONTH(O.Date)
     GROUP BY MONTH(I.date);
    

    結果:

    | MONTH | COUNTIN | COUNTOUT |
    ------------------------------
    |     5 |       1 |        1 |
    |     7 |       1 |        1 |
    |     6 |       0 |        1 |
    

    このSQLFiddle を参照してください

    また、結果を月ごとに並べ替えるには、次のようなサブクエリを使用する必要があります。

    SELECT * FROM
    (
        SELECT MONTH(I.date) AS `month`
             , COUNT(I.ID) AS `countin`
             , COUNT(O.ID) AS `countOUT`
          FROM TableIN I
         LEFT JOIN TableOUT O
            ON MONTH(I.Date) = MONTH(O.Date)
         GROUP BY MONTH(I.date)
        UNION
        SELECT MONTH(O.date) AS `month`
             , COUNT(I.ID) AS `countin`
             , COUNT(O.ID) AS `countOUT`
          FROM TableIN I
         RIGHT JOIN TableOUT O
            ON MONTH(I.Date) = MONTH(O.Date)
         GROUP BY MONTH(I.date)
        ) tbl
    ORDER BY Month;
    

    このSQLFiddle を参照してください



    1. mysql innodbバッファプールをクリア/フラッシュする方法は?

    2. 2つのテーブルを一度に更新します

    3. SQL-特定の値を持つ行をカウントする

    4. Hibernateの数式アノテーション-MySql関数:INTERVAL、DAY