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
- MySQL 的CASE WHEN 語句使用說明MySql
- mysql中的case when 與if()MySql
- 136-MySQL5.17 update更新[case when then end]的使用MySql
- SQL中的CASE WHEN使用SQL
- ORACLE CASE WHEN 及 SELECT CASE WHEN的用法Oracle
- Oracle Case WhenOracle
- SQL Case WhenSQL
- SQLServer使用case when中的order bySQLServer
- SQL Case when 的使用方法SQL
- Oracle的order by case whenOracle
- Case when 支援變數變數
- case when遇上null值Null
- oracle plsql case when_end case小記OracleSQL
- Oracle case when改寫SQLOracleSQL
- ORACLE多欄位CASE WHENOracle
- PL/SQL Case when應用SQL
- sql case when, Exist ,group by ,聚合SQL
- SQL Server CASE WHEN ... THEN ... ELSE ... ENDSQLServer
- plsql_case when_end case學習小例SQL
- plsql_case when_if else endifSQL
- sql中case when的小學SQL
- 案例:oracle中case when的用法Oracle
- sqlserver使用order by case when進行優先順序排序SQLServer排序
- SQL中的case when then else end用法SQL
- sql server select case when的用法SQLServer
- MySQL中case?when對NULL值判斷的踩坑記錄RTGYMySqlNull
- Oracle vs PostgreSQL Develop(30) - Index&Case whenOracleSQLdevIndex
- oracle面試題[關於case when的用法]Oracle面試題
- where條件中使用case when來實現不同列的join
- PLSQL條件(CASE WHEN)語句小應用SQL
- ORACLE SQL開發where子句之case-whenOracleSQL
- Oracle 條件索引 case when 報錯解決方案Oracle索引
- 【06】把 Elasticsearch 當資料庫使:CASE WHEN 聚合Elasticsearch資料庫
- sqlserver與oracle case when else ,isnull語法差別SQLServerOracleNull
- SQL語句case when外用sum與count的區別SQL
- SQL中的case when then else end用法 【詳細】轉載SQL
- 【專案實戰】---SQLServer中case when的簡單用法SQLServer