sql >> Databasteknik >  >> RDS >> Mysql

Hur man använder CASE Statement i MySQL

MySQL Case-sats låter dig kontrollera ett värde för flera villkor i en SQL-fråga. I den här artikeln kommer vi att titta på hur man använder fallbeskrivning i MySQL.


Hur man skriver ärendeutlåtande i MySQL

Här är syntaxen för MySQL Case-sats.

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

I ovanstående fråga måste du ange tabellnamnet. Du måste också nämna varje villkor som du vill kontrollera en given kolumn för, inom case … slutsats. Du måste också nämna värdet som ska tilldelas kolumnen om varje villkor är sant, det vill säga för varje fall.

Exempel på MySQL-fall

Låt oss titta på några exempel på MySQL Case-funktion nedan.

Låt oss säga att du har följande tabell försäljning(id, order_date, summa) .

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

Bonusläsning:Hur man frågar JSON-kolumnen i MySQL

Här är SQL-frågan för att gruppera beloppet värden i 3 hinkar – mindre än lika med 100, 100-300 och mer än 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       |
+------+------------+------------------------+

Bonus läsning:Hur man undviker att infoga dubbletter av poster i MySQL

Observera att om inget av fallsatserna är uppfyllda för ett värde, kommer CASE-satsen att returnera NULL. Här är ett exempel

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

I exemplet ovan returnerar CASE-satsen NULL för 100, eftersom den inte uppfyller något av villkoren.

MySQL Case statement är användbart för att skapa frekvensfördelningar och gruppera värden.

Du kan också använda WHERE-villkoret för att tillämpa case-satsen på en delmängd av rader.

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-fodral i Ubiq

Ubiqs rapporteringsverktyg stöder alla ovanstående SQL-frågor och gör det enkelt att visualisera SQL-resultat på olika sätt. Här är CASE SQL-frågan som nämns ovan, i Ubiq.

Behöver du ett rapporteringsverktyg för MySQL? Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. Hitta skillnaden mellan tidsstämplar i sekunder i PostgreSQL

  2. Heroku psql:FATAL:återstående anslutningsplatser är reserverade för superanvändaranslutningar som inte replikeras

  3. Jämföra SQL, frågebyggare och ORM

  4. Kan inte ansluta till postgres med jdbc i pyspark-skalet