sql中case的用法 case when多個條件如何連用
- 夕逆IT
- 數(shù)據(jù)庫
- 2023-08-13
- 538
sql語句中case語句用法答:sql語句中case語句用法步驟如下:1.簡單形式:用于將一個列或表達(dá)式映射到一個特定值或指定操作。例如:SELECTCASEsexWH...
sql語句中case語句用法
答:sql語句中case語句用法步驟如下:1.簡單形式:用于將一個列或表達(dá)式映射到一個特定值或指定操作。例如:SELECTCASEsexWHEN'M'THEN'男'ELSE'女'ENDasgenderFROMstudents這個查詢將返回一個名為gender的列,如果sex是'M',則該列的值為'男',否則為'女'。
2.搜索形式:用于根據(jù)條件對不同的操作進(jìn)行分組。例如:SELECTname,CASEWHENage<18THEN'未成年'WHENage>=18ANDage<40THEN'年輕人'ELSE'中老年人'ENDASage_groupFROMcustomers這個查詢將返回一個條件。
SQL中casewhen的用法
casewhen用于SQL中進(jìn)行條件判斷,可以替代復(fù)雜的if-else語句,使得SQL代碼更簡潔易懂語法格式如下:casewhen表達(dá)式當(dāng)條件成立then結(jié)果,當(dāng)條件不成立then結(jié)果...else結(jié)果nendcasewhen可以在select、update、delete等SQL操作中使用,支持多個條件判斷,可以按照需要進(jìn)行嵌套使用,具有靈活性
sql中casewhenthen中end是什么意思
例如一個3條件取值的字段:casewhen條件1then取值1when條件2then取值2else取值3endwhen后接條件語句,then后為字段取值(數(shù)值或字符串等都可以,但類型須一致)。CASEWHEN及SELECTCASEWHEN的用法:Case具有兩種格式。簡單Case函數(shù)和Case搜索函數(shù)。1、簡單Case函數(shù)CASEsexWHEN'1'THEN'男'WHEN'2'THEN'女'ELSE'其他'END2、Case搜索函數(shù)CASEWHENsex='1'THEN'男'WHENsex='2'THEN'女'參考資料
sql怎么剔重
在使用SQL提數(shù)的時候,常會遇到表內(nèi)有重復(fù)值的時候,比如我們想得到uv(獨立訪客),就需要做去重。
在MySQL中通常是使用distinct或groupby子句,但在支持窗口函數(shù)的sql(如HiveSQL、Oracle等等)中還可以使用row_number窗口函數(shù)進(jìn)行去重。
舉個栗子,現(xiàn)有這樣一張表task:
備注:
task_id:任務(wù)id;
order_id:訂單id;
start_time:開始時間
注意:一個任務(wù)對應(yīng)多條訂單
我們需要求出任務(wù)的總數(shù)量,因為task_id并非唯一的,所以需要去重:
distinct
--列出task_id的所有唯一值(去重后的記錄)
--selectdistincttask_id
--fromTask;
--任務(wù)總數(shù)
selectcount(distincttask_id)task_num
fromTask;
distinct通常效率較低。它不適合用來展示去重后具體的值,一般與count配合用來計算條數(shù)。
distinct使用中,放在select后邊,對后面所有的字段的值統(tǒng)一進(jìn)行去重。比如distinct后面有兩個字段,那么1,1和1,2這兩條記錄不是重復(fù)值。
groupby
--列出task_id的所有唯一值(去重后的記錄,null也是值)
--selecttask_id
--fromTask
--groupbytask_id;
--任務(wù)總數(shù)
selectcount(task_id)task_num
from(selecttask_id
fromTask
groupbytask_id)tmp;
row_number
row_number是窗口函數(shù),語法如下:
row_number()over(partitionby<用于分組的字段名>orderby<用于組內(nèi)排序的字段名>)
其中partitionby部分可省略。
--在支持窗口函數(shù)的sql中使用
selectcount(casewhenrn=1thentask_idelsenullend)task_num
from(selecttask_id
,row_number()over(partitionbytask_idorderbystart_time)rn
fromTask)tmp;
此外,再借助一個表test來理理distinct和groupby在去重中的使用:
--下方的分號;用來分隔行
selectdistinctuser_id
fromTest;--返回1;2
selectdistinctuser_id,user_type
fromTest;--返回1,1;1,2;2,1
selectuser_id
fromTest
groupbyuser_id;--返回1;2
selectuser_id,user_type
fromTest
groupbyuser_id,user_type;--返回1,1;1,2;2,1
selectuser_id,user_type
fromTest
groupbyuser_id;
--Hive、Oracle等會報錯,mysql可以這樣寫。
--返回1,1或1,2;2,1(共兩行)。只會對groupby后面的字段去重,就是說最后返回的記錄數(shù)等于上一段sql的記錄數(shù),即2條
--沒有放在groupby后面但是在select中放了的字段,只會返回一條記錄(好像通常是第一條,應(yīng)該是沒有規(guī)律的)
sql中怎么實現(xiàn)整個表的轉(zhuǎn)置
SQL表轉(zhuǎn)置關(guān)鍵字casewhen,pivot
在SQLServer2005之前,通常需要通過case子句來處理。
SQL2005后面可以使用pivot
下面介紹casewhen用法,SQL如下:
selectProductID,
sum(casewhenOrderMonth=5thenSubTotalend)as五月,
sum(casewhenOrderMonth=6thenSubTotalend)as六月,
sum(casewhenOrderMonth=7thenSubTotalend)as七月
fromOrders
groupbyProductID
pivot用法:SQL如下:
selectsid,[1]as[database],[2]as[CSharp],[3]as[Xml]
from(selectsid,cid,markfromtbl_marks)tpivot
(
sum(mark)
forcidin([1],[2],[3])
)aspvt
sql怎么優(yōu)化case when
casewhen0then‘是’when1then‘否’;一般情況下在查詢語句中用,根居不同的數(shù)據(jù)結(jié)果查詢轉(zhuǎn)換成自己想要的類型;樓主的情況,建議用存儲過程,寫if語法來做處理
本文鏈接:http://xinin56.com/su/1042.html