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

月ごとのカウントを取得するためのMysqlクエリ

    INTフィールドが作成されている場合は、 FROM_UNIXTIME 関数を使用して日付フィールドに変換してから、 月を抽出する関数:

    SELECT Month(FROM_UNIXTIME(created)), Count(*)
    FROM yourtable
    WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
    GROUP BY Month(FROM_UNIXTIME(created))
    

    これにより、過去12か月間に作成されたすべての行がカウントされます。年ごとにグループ化する方がおそらく良いことに注意してください:

    SELECT Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created)), Count(*)
    FROM yourtable
    WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
    GROUP BY Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created))
    

    行の代わりに登録番号を数える必要がある場合は、

    のようなものを使用できます。
    COUNT(registration_number)
    

    null値をスキップする、または

    COUNT(DISTINCT registration_number)
    

    個別のもののみをカウントします。

    編集

    count =0の月も表示する必要がある場合は、次のようなクエリを使用して、現在および前年のすべての月を返します。

    SELECT y, m
    FROM
      (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
      (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
        UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
        UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months;
    

    次に、LEFT JOINを使用します。これは、最初のクエリのすべての行と、一致する2番目のクエリの行のみを返します。

    SELECT y, m, Count(yourtable.created)
    FROM (
      SELECT y, m
      FROM
        (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
        (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
          UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
          UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
      LEFT JOIN yourtable
      ON ym.y = YEAR(FROM_UNIXTIME(yourtable.created))
         AND ym.m = MONTH(FROM_UNIXTIME(yourtable.created))
    WHERE
      (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
      OR
      (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
    GROUP BY y, m
    

    (ここでは過去12か月のみを検討していることに注意してください。したがって、2013年4月中旬の場合は、2012年5月から4月13日までの間隔で行がカウントされます。これが正しくない場合は、お知らせください)



    1. ZendDBを使用してサブクエリを作成する

    2. 19データベース設計エラーについて学ぶためのオンラインリソース

    3. ZFテーブルインターフェイスで結合クエリを実行するにはどうすればよいですか?

    4. 複数の列にFULLTEXTインデックスを作成するにはどうすればよいですか?