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

MySQLで年と月でグループ化する方法

    このクエリはすべての行をカウントし、Attributeが存在する行のみもカウントします。 nullではなく、行の年と月でグループ化:

    SELECT
      Year(`date`),
      Month(`date`),
      Count(*) As Total_Rows,
      Count(`Attribute`) As Rows_With_Attribute
    FROM your_table
    GROUP BY Year(`date`), Month(`date`)
    

    (これは、Count(*)がすべての行をカウントするため、Count(Attibute)は属性がnullでないすべての行をカウントするためです)

    ピボットでテーブルが必要な場合は、これを使用して、属性がnullでない行のみをカウントできます。

    SELECT
      Year(`date`),
      Count(case when month(`date`)=1 then `Attribute` end) As Jan,
      Count(case when month(`date`)=2 then `Attribute` end) As Feb,
      Count(case when month(`date`)=3 then `Attribute` end) As Mar,
      ...
    FROM your_table
    GROUP BY Year(`date`)
    

    そして、これですべての行をカウントします:

    SELECT
      Year(`date`),
      Count(case when month(`date`)=1 then id end) As Jan,
      Count(case when month(`date`)=2 then id end) As Feb,
      Count(case when month(`date`)=3 then id end) As Mar,
      ...
    FROM your_table
    GROUP BY Year(`date`)
    

    (または、idをカウントする代わりに、Sum(Month( date )=1) カンダーの答えのように)。もちろん、両方のクエリを組み合わせてこれに含めることができます:

    SELECT
      Year(`date`),
      Count(case when month(`date`)=1 then id end) As Jan_Tot,
      Count(case when month(`date`)=1 then `Attribute` end) As Jan_Attr,
      Count(case when month(`date`)=2 then id end) As Feb_Tot,
      Count(case when month(`date`)=2 then `Attribute` end) As Feb_Attr,
      Count(case when month(`date`)=3 then id end) As Mar_Tot,
      Count(case when month(`date`)=3 then `Attribute` end) As Mar_Attr,
      ...
    FROM your_table
    GROUP BY Year(`date`)
    


    1. OracleSQLスクリプトでの条件ベースのスプール生成

    2. Java / MySQL SQLファイル全体をmysqlサーバーにどのように挿入しますか?

    3. SQLServerで月名を月番号に変換する

    4. MySQLでNOTEQUAL値を取得するために複数のテーブルを結合する