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!