萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql數據庫case語句的使用方法

mysql數據庫case語句的使用方法

mysql中case其實就是一個簡單的if else判斷了,這種邏輯相對簡單一點但在實際應用中還是非常的不錯了,下面來扯小編整理的一些關於mysql case 用法。

表A:如圖

mysql數據庫case語句的使用方法

表B:如圖

 

mysql數據庫case語句的使用方法

 

想輸出master_id下的status=6的order數量,想要輸出的結果如下圖:

 

c

一開始所采取的語句是:select count(a.order_id) from a left join b on a.order_id=b.order_id where b.status=6 group by a.master_id ,發現,當status=6的這條數據不存在是查詢的結果就是空,並不是像想象中返回0。

用case語句就可以很好的解決這個問題:

 代碼如下 復制代碼

select a.master_id,sum(case when b.status=6 then 1 else 0 end) as total_count from a inner join b on a.order_id=b.id group by a.master_id.

用case語句執行時,當滿足status=6時就返回1否則返回0,用sum計算出符合條件的數量。

好了現在再整理一些簡單的例子供各位參考。

 代碼如下 復制代碼

表的創建
CREATE TABLE `lee` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` char(20) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

數據插入:
insert into lee(name,birthday) values ('sam','1990-01-01');
insert into lee(name,birthday) values ('lee','1980-01-01');
insert into lee(name,birthday) values ('john','1985-01-01');


第一種用法:
SELECT name,
CASE WHEN birthday < '1981' THEN 'old'
WHEN birthday > '1988' THEN 'yong'
ELSE 'ok' END YORN
FROM lee


第二種用法:
SELECT NAME, CASE name
WHEN 'sam' THEN 'yong'
WHEN 'lee' THEN 'handsome'
ELSE 'good' END as oldname
FROM lee


第三種:當然了,case when 語句還可以復合
select name, birthday,
case
when birthday > '1983' then 'yong'
when name='lee' then 'handsome'
else 'just so so' end
from lee;

在這裡用sql語句進行日期比較的話,需要對年加引號,要不然可能結果和預期的結果不同,
當然也可以用year函數來實現
select name,
case when year(birthday) > 1988 then 'yong'
when year(birthday) < 1980 then 'old'
else 'ok' END
from lee;

==========================================================
create table penalties
(
paymentno INTEGER not NULL,
payment_date DATE not null,
amount DECIMAL(7,2) not null,
primary key(paymentno)
)

insert into penalties values(1,'2008-01-01',3.45);
insert into penalties values(2,'2009-01-01',50.45);
insert into penalties values(3,'2008-07-01',80.45);

第一題:對罰款登記分為三類,第一類low,包括大於0小於等於40的罰款,第二類moderate大於40到80之間的罰款,第三類high包含所有大於80的罰款

select payment_date, amount,
case
when amount >= 0 AND amount < 40 then 'low'
when amount >=40 AND amount < 80 then 'moderate'
when amount >=80 then 'high'
else 'null' END
FROM penalties


第二題:統計出屬於low的罰款編號
select * from
( select paymentno, amount,
case
when amount >= 0 AND amount < 40 then 'low'
when amount >=40 AND amount < 80 then 'moderate'
when amount >=80 then 'high'
else 'incorrect' end lvl
from penalties) as p
where p.lvl = 'low'

copyright © 萬盛學電腦網 all rights reserved