mysql case when then 使用
建表:
create table hank (id int,name varchar(20));
插入資料:
insert into hank values(1,'A');
insert into hank values(2,'B');
insert into hank values(3,'C');
透過case when then更新資料:
update hank set name = case id
when 1 then 'D'
when 2 then 'E'
when 3 then 'F'
end
where id in(1,2,3);
sql的意思是,更新name欄位,如果id=1 則name的值為D,如果id=2 則 name 的值為E,如果id=3 則 name 的值為F。
即是將條件語句寫在了一起。
這裡的where部分不影響程式碼的執行,但是會提高sql執行的效率。確保sql語句僅執行需要修改的行數,這裡只有3條資料進行更新,而where子句確保只有3行資料執行
表的建立
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'
create table hank (id int,name varchar(20));
插入資料:
insert into hank values(1,'A');
insert into hank values(2,'B');
insert into hank values(3,'C');
透過case when then更新資料:
update hank set name = case id
when 1 then 'D'
when 2 then 'E'
when 3 then 'F'
end
where id in(1,2,3);
sql的意思是,更新name欄位,如果id=1 則name的值為D,如果id=2 則 name 的值為E,如果id=3 則 name 的值為F。
即是將條件語句寫在了一起。
這裡的where部分不影響程式碼的執行,但是會提高sql執行的效率。確保sql語句僅執行需要修改的行數,這裡只有3條資料進行更新,而where子句確保只有3行資料執行
表的建立
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'
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2129003/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql中case when的使用MySql
- SQLServer使用case when中的order bySQLServer
- case when 語句
- SQL Server CASE WHEN ... THEN ... ELSE ... ENDSQLServer
- sql case when, Exist ,group by ,聚合SQL
- Oracle case when改寫SQLOracleSQL
- sqlserver使用order by case when進行優先順序排序SQLServer排序
- MySQL中case?when對NULL值判斷的踩坑記錄RTGYMySqlNull
- Oracle vs PostgreSQL Develop(30) - Index&Case whenOracleSQLdevIndex
- When Rubber Meets the Road: Unveiling the Curious Case of Volvo Truck Engine Failures!AI
- Oracle 條件索引 case when 報錯解決方案Oracle索引
- SQL語句case when外用sum與count的區別SQL
- SQL中的case when then else end用法 【詳細】轉載SQL
- 語法解析器續:case..when..語法解析計算
- Oracle group by與case when統一單位後統計數量Oracle
- 04、MySQL Case-MySQL常用監控指標MySql指標
- 05、MySQL Case-MySQL binlog誤清除恢復MySql
- 13、MySQL Case-MySQL分析函式實現MySql函式
- 雲端計算學習路線圖素材、課件,msyql中CASE WHEN語法
- Django筆記二十三之case、when操作條件表示式搜尋、更新等操作Django筆記
- MySQL Case-MySQL5.7無效的並行複製MySql並行
- MySQL Case-MySQL8.0真正的並行複製writesetMySql並行
- 在CSS中如何使用 when/elseCSS
- mysqldump: Error 2013: Lost connection to MySQL server during query when dumpingMySqlErrorServer
- Golang switch case 的使用注意點Golang
- MySQL條件判斷IF,CASE,IFNULL語句詳解MySqlNull
- 14、MySQL Case-線上表誤刪除恢復MySql
- MySQL8.0的坑之lower_case_table_namesMySql
- MySQL Case-時間問題導致MySQL例項批次當機MySql
- 11、MySQL Case-記一次公有云環境MySQL遭勒索病毒MySql
- 15、MySQL Case-時間問題導致MySQL例項批次當機MySql
- 16、MySQL Case-索引key對select count(*)的影響MySql索引
- 【每日一包0013】to-capital-case,to-constant-case,to-dot-caseAPI
- 使用 Drools 和 JPA & Drools show case in docker hubDocker
- 10、MySQL Case-釋放ibtmp表空間正確姿勢MySql
- MySQL Case-max_allowed_packet過小是否會擷取sql文字MySql
- Java Case InterviewJavaView
- Java switch caseJava
- js 學習之路7:switch/case語句的使用JS