sql >> Databáze >  >> RDS >> Mysql

Jak používat příkaz CASE v MySQL

Příkaz MySQL Case vám umožňuje zkontrolovat hodnotu pro více podmínek v dotazu SQL. V tomto článku se podíváme na to, jak používat příkaz case v MySQL.


Jak napsat Case Statement v MySQL

Zde je syntaxe příkazu MySQL Case.

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

Ve výše uvedeném dotazu musíte zadat název tabulky. Také musíte uvést každou podmínku, kterou chcete zkontrolovat v daném sloupci, v příkazu case… end. Musíte také zmínit hodnotu, která má být sloupci přiřazena, pokud je každá podmínka pravdivá, tedy pro každý případ.

Příklady případu MySQL

Podívejme se na některé příklady funkce MySQL Case níže.

Řekněme, že máte následující tabulku prodej(id, datum_objednávky, částka) .

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

Bonusové čtení:Jak dotazovat sloupec JSON v MySQL

Zde je dotaz SQL pro seskupení částky hodnoty do 3 segmentů – méně než 100, 100–300 a více než 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       |
+------+------------+------------------------+

Bonusové čtení:Jak se vyhnout vkládání duplicitních záznamů do MySQL

Upozorňujeme, že pokud není pro hodnotu splněn žádný z příkazů case, příkaz CASE vrátí hodnotu NULL. Zde je příklad

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

Ve výše uvedeném příkladu vrací příkaz CASE NULL za 100, protože nesplňuje žádnou z podmínek.

Příkaz MySQL Case je užitečný pro vytváření frekvenčních distribucí a seskupování hodnot.

Můžete také použít podmínku WHERE k použití příkazu case na podmnožinu řádků.

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


Případ MySQL v Ubiq

Nástroj Ubiq Reporting podporuje všechny výše uvedené SQL dotazy a usnadňuje vizualizaci výsledků SQL různými způsoby. Zde je CASE SQL dotaz zmíněný výše v Ubiq.

Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Zkuste to ještě dnes!

  1. Importujte data z tabulky Excel nebo CVS do MySQL

  2. SQL Union – Komplexní průvodce operátorem UNION

  3. Server Postgres neodpovídá na požadavek nodejs

  4. Význam délky varchar v tabulce MySQL