Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So verwenden Sie die CASE-Anweisung in MySQL

Mit der MySQL Case-Anweisung können Sie einen Wert auf mehrere Bedingungen in einer SQL-Abfrage überprüfen. In diesem Artikel werden wir uns ansehen, wie man Case-Anweisungen in MySQL verwendet.


So schreiben Sie eine Case-Anweisung in MySQL

Hier ist die Syntax für die MySQL Case-Anweisung.

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

In der obigen Abfrage müssen Sie den Tabellennamen angeben. Außerdem müssen Sie jede Bedingung erwähnen, auf die Sie eine bestimmte Spalte überprüfen möchten, innerhalb der case… end-Anweisung. Sie müssen auch den Wert angeben, der der Spalte zugewiesen werden soll, wenn jede Bedingung wahr ist, dh für jeden Fall.

Beispiele für MySQL-Fälle

Sehen wir uns unten einige Beispiele der MySQL Case-Funktion an.

Nehmen wir an, Sie haben die folgende Tabelle 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 |
+------+------------+--------+

Bonuslektüre:Wie man die JSON-Spalte in MySQL abfragt

Hier ist die SQL-Abfrage, um den Betrag zu gruppieren Werte in 3 Buckets – weniger als gleich 100, 100-300 und mehr als 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       |
+------+------------+------------------------+

Bonuslektüre:So vermeiden Sie das Einfügen doppelter Datensätze in MySQL

Bitte beachten Sie, dass die CASE-Anweisung NULL zurückgibt, wenn keine der case-Anweisungen für einen Wert erfüllt ist. Hier ist ein Beispiel

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 |
+------+------------+------------------+

Im obigen Beispiel gibt die CASE-Anweisung NULL für 100 zurück, da sie keine der Bedingungen erfüllt.

Die MySQL Case-Anweisung ist nützlich zum Erstellen von Häufigkeitsverteilungen und Gruppieren von Werten.

Sie können auch die WHERE-Bedingung verwenden, um die Case-Anweisung auf eine Teilmenge von Zeilen anzuwenden.

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>;


MySQL-Fall in Ubiq

Das Ubiq Reporting Tool unterstützt alle oben genannten SQL-Abfragen und macht es einfach, SQL-Ergebnisse auf unterschiedliche Weise zu visualisieren. Hier ist die oben erwähnte CASE-SQL-Abfrage in Ubiq.

Benötigen Sie ein Reporting-Tool für MySQL? Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!