sql---case...when...
阿新 • • 發佈:2021-07-22
"""
使用情況:等值轉換,範圍轉換,列轉行
操作方式:兩種
1:將case後的欄位值與when後面的值進行比較,簡單分類
select 欄位1, 欄位2,
case 欄位3
when 值1 then 新值
when 值2 then 新值
end as 重新命名欄位3的名字
from table
where ……
order by ……
2:case後無值,根據when邏輯表示式判定
select 欄位1, 欄位2,
case
when 欄位 > 值1 then 新值
when 欄位 < 值1 then 新值
else 新值
end as 重新命名欄位3的名字
from table
where ……
order by ……
"""
原始資料展示
select * from one_buyer
範圍轉換
select id,name,case when the_times >=70 then 'young' else 'old' end as age fromone_buyer;
等值轉換
select id,name,case ser_id_id when 1 then 'fenda' when 2 then 'baisuishan' else 'kele' end as goods from one_buyer
範圍轉換 --- 兩個語句同樣的效果
update one_buyer set gender = case gender > 70 when true then 1 else 0 end; update one_buyer set gender = case when gender > 70 then 1 else0 end;
行轉列
"""
5,6,7為列轉行,進階語句,最終執行7將生成列轉行檢視,6則將查詢結果返回,6為5的分組進階
參考連結:https://blog.csdn.net/weixin_44770933/article/details/106992881?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
"""
原始資料
sql5 = "select name, case when grade = 'primary' then rate else 0.00 end as 'primary' , case when grade = 'middle' then rate else 0.00 end as 'middle' , case when grade = 'high' then rate else 0.00 end as 'high' from mst_class;"
增加分組,並取最大值
sql6 = "select name, max(case when grade = 'primary' then rate else 0.00 end) as 'primary' , max(case when grade = 'middle' then rate else 0.00 end) as 'middle' , max(case when grade = 'high' then rate else 0.00 end) as 'high' from mst_class group by name"
建立檢視容器
sql7 = "create view class_grade as select name, max(case when grade = 'primary' then rate else 0.00 end) as 'primary' , max(case when grade = 'middle' then rate else 0.00 end) as 'middle' , max(case when grade = 'high' then rate else 0.00 end) as 'high' from mst_class group by name"
補充:
"""
1. IF(expr1,expr2,expr3):如果第一個條件為True,則返回第二個引數,否則返回第三個
2. ifnull(expr1,expr2) 判斷是否為空:假如第一個引數為null,則返回第二個引數;否則直接返回第一個引數的值
此處不上圖了
"""
sql8 = "select id,name,if(gender=1,'man','women') as sex from one_buyer" sql9 = "select id,name,case gender =1 when true then 'man' else 'women' end as sex from one_buyer" sql10 = "select id,name,ifnull(the_user,'ttoia') as the_user from one_ser where id=32" sql11 = "select id,name,case when the_user is null then 'ttoia' else the_user end as user from one_ser where id =32" sql12 = "insert into one_ser(name,price,num,is_sail) values('qiaolezi',456,89,1);" sql13 = "select id,the_user from one_ser where id>30"
待完善。。。