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

単一のMySQLクエリで条件が異なる複数のカウント

    IFまたはCASEステートメントを使用して、MySQLの単一のクエリでさまざまな条件または基準を持つ複数のカウントを簡単に取得できます。この記事では、MySQLで複数の条件で複数のカウントを取得する方法を見ていきます。


    単一のMySQLクエリで条件が異なる複数のカウント

    単一のMySQLクエリでさまざまな条件で複数のカウントを取得する手順は次のとおりです。

    次のテーブルがあるとしますproduct_sales(id、product、order_date、amount)

    mysql> create table product_sales(
         id int,
         product varchar(10),
         order_date date,
         amount int
         );
    
    mysql> insert into product_sales(id, product, order_date, amount)
         values(1, 'A', '2021-01-01', 250),
         (2, 'B', '2021-01-02', 200),
         (3, 'A', '2021-01-03', 150),
         (4, 'B', '2021-01-04', 250);
    
    mysql> select * from product_sales;
    +------+---------+------------+--------+
    | id   | product | order_date | amount |
    +------+---------+------------+--------+
    |    1 | A       | 2021-01-01 |    250 |
    |    2 | B       | 2021-01-02 |    200 |
    |    3 | A       | 2021-01-03 |    150 |
    |    4 | B       | 2021-01-04 |    250 |
    +------+---------+------------+--------+

    1回のクエリで、合計数、製品Aの注文数、および金額が200を超える製品Bの注文数が必要だとします。

    上記を実行するためのSQLクエリは次のとおりです。

    mysql> select count(*) as total_count,
            count(if(product='A',1,null)) as A_count,
            count(if(product='B' and amount>200,1,null)) as B_count
            from product_sales;
    +-------------+---------+---------+
    | total_count | A_count | B_count |
    +-------------+---------+---------+
    |           4 |       2 |       1 |
    +-------------+---------+---------+
    

    上記のクエリを詳しく見てみましょう。

    count(*) テーブル内のすべての行をカウントして、合計数を算出します。

    count(if(product =’A’、1、null))as A_count – count関数内でIF条件を使用すると、条件がtrueの行のみがカウントされます。私たちの条件は、product =Aの行を照合することです。したがって、MySQLは、productがAの行のみをカウントします。それ以外の場合はカウントされません(NULLとして割り当てられます)。

    nullを使用することが重要であることに注意してください IF条件が失敗した場合、一致しない行もカウントされます。

    同様に、product=Bでamount>200の行の数を計算します。

    以下に示すように、CASEステートメントを使用して上記の結果を取得することもできます。

    mysql> select count(*) as total_count,
     count(case when product='A' then 1 else null end) as A_count,
     count(case when product='B' and amount>200 then 1 else null end) as B_count
     from product_sales;
    +-------------+---------+---------+
    | total_count | A_count | B_count |
    +-------------+---------+---------+
    |           4 |       2 |       1 |
    +-------------+---------+---------+

    ボーナスリード:MySQLでCOALESCEを使用する方法


    Ubiqで複数のカウントを取得

    Ubiq Reportingツールは、上記のすべてのSQLクエリをサポートし、さまざまな方法でSQL結果を簡単に視覚化できるようにします。また、MySQLデータからダッシュボードとチャートを作成することもできます。これが、Ubiqでの上記のSQLクエリです。

    MySQL用のレポートツールが必要ですか? Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日それを試してみてください!

    1. PostgresのRails配列列に新しいデータが保持されない

    2. ORA-12514 TNS:リスナーは現在、接続記述子で要求されたサービスを認識していません

    3. MySQLに書き込むときにTextAreaからの改行を保持する

    4. SQL Serverで「smalldatetime」を「datetimeoffset」に変換します(T-SQLの例)