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

MySQLでCASEステートメントを使用する方法

    MySQL Caseステートメントを使用すると、SQLクエリの複数の条件の値を確認できます。この記事では、MySQLでcaseステートメントを使用する方法を見ていきます。


    MySQLでCaseステートメントを作成する方法

    MySQLCaseステートメントの構文は次のとおりです。

    select 
    case 
        when condition1 then value1
        when condition2 then value2
        ...
    end,
    column2, column3, ...
    from table_name

    上記のクエリでは、テーブル名を指定する必要があります。また、case…endステートメント内で、特定の列をチェックする各条件について言及する必要があります。また、各条件が真の場合、つまり各ケースについて、列に割り当てられる値についても言及する必要があります。

    MySQLケースの例

    以下のMySQLケース関数の例をいくつか見てみましょう。

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

    mysql> create table sales(id int, order_date date, amount int);
    
    mysql> insert into sales(id, order_date, amount)
         values(1, '2021-01-01', 150),
         (1, '2021-01-02', 250),
         (1, '2021-01-03', 100),
         (1, '2021-01-04', 150),
         (1, '2021-01-05', 350);
    
    mysql> select * from sales;
    +------+------------+--------+
    | id   | order_date | amount |
    +------+------------+--------+
    |    1 | 2021-01-01 |    150 |
    |    1 | 2021-01-02 |    250 |
    |    1 | 2021-01-03 |    100 |
    |    1 | 2021-01-04 |    150 |
    |    1 | 2021-01-05 |    350 |
    +------+------------+--------+

    ボーナスリード:MySQLでJSON列をクエリする方法

    金額をグループ化するSQLクエリは次のとおりです 3つのバケットへの値– 100未満、100〜300、および300を超える値。

    mysql> select id, order_date,
         case when amount<=100 then 'less than equal to 100'
              when amount>100 and amount<300 then '101 to 300'
              when amount>=300 then 'greater than 300'
         end as bucket
         from sales;
    +------+------------+------------------------+
    | id   | order_date | bucket                 |
    +------+------------+------------------------+
    |    1 | 2021-01-01 | 101 to 300             |
    |    1 | 2021-01-02 | 101 to 300             |
    |    1 | 2021-01-03 | less than equal to 100 |
    |    1 | 2021-01-04 | 101 to 300             |
    |    1 | 2021-01-05 | greater than 300       |
    +------+------------+------------------------+
    

    ボーナスリード:MySQLに重複レコードを挿入しないようにする方法

    値に対してcaseステートメントのいずれも満たされない場合、CASEステートメントはNULLを返すことに注意してください。これが例です

    mysql> select id, order_date,
         case when amount<100 then 'less than 100'
              when amount>100 and amount<300 then '100 to 300'
         when amount>300 then 'greater than 300'
         end as bucket
         from sales;
    +------+------------+------------------+
    | id   | order_date | bucket           |
    +------+------------+------------------+
    |    1 | 2021-01-01 | 100 to 300       |
    |    1 | 2021-01-02 | 100 to 300       |
    |    1 | 2021-01-03 | NULL             |
    |    1 | 2021-01-04 | 100 to 300       |
    |    1 | 2021-01-05 | greater than 300 |
    +------+------------+------------------+
    

    上記の例では、CASEステートメントはどの条件も満たさないため、100に対してNULLを返します。

    MySQL Caseステートメントは、度数分布の作成と値のグループ化に役立ちます。

    WHERE条件を使用して、行のサブセットにcaseステートメントを適用することもできます。

    select id, order_date,
         case when amount<=100 then 'less than equal to 100'
              when amount>100 and amount<300 then '101 to 300'
              when amount>=300 then 'greater than 300'
         end as bucket
         from sales
         WHERE <condition>;


    UbiqのMySQLケース

    Ubiq Reportingツールは、上記のすべてのSQLクエリをサポートし、さまざまな方法でSQL結果を簡単に視覚化できるようにします。これが、Ubiqでの上記のCASESQLクエリです。

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

    1. 連続番号でSQLを更新する

    2. SQLサーバーからHTTPリクエストを作成するにはどうすればよいですか?

    3. 911/112:緊急通報サービスのデータモデル

    4. 実際の使用法とSQLiteドキュメントのコンテキストで、EnableWriteAheadLoggingはどの程度スレッドセーフですか?