sql系列之001_{case~~when~~ then}
1、等值判断,相当于switch case
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
ELSE defaultreturnvalue
END
例如:
case level
when 1 then '大叔'
when 2 then '二叔'
when 3 then '小叔'
end
相当于Switch,只能等值判断。
- case level
- when 1 then '大叔'
- when 2 then '二叔'
- when 3 then '小叔'
- end
- )
- from userinfo
select username,叔级别=( case level when 1 then '大叔' when 2 then '二叔' when 3 then '小叔' end ) from userinfo
其结果为:~~~
2、区间判断
CASE
WHEN condition1 THEN returnvalue1
WHEN condition 2 THEN returnvalue2
WHEN condition 3 THEN returnvalue3
ELSE defaultreturnvalue
END
相当于if…else if…else….(可以进行区间判断)
注意:then后面返回的数据类型要一致, returnvalue1、 returnvalue2、 returnvalue3的数据类型必须一致。
- select username,年纪=(
- case
- when age between 28 and 30 then '大叔'
- when age between 25 and 27 then '大青年'
- when age between 20 and 24 then '骚年'
- when age < 20 then '小屁孩'
- else 'baby'
- end
- )
- from userinfo2
select username,年纪=( case when age between 28 and 30 then '大叔' when age between 25 and 27 then '大青年' when age between 20 and 24 then '骚年' when age < 20 then '小屁孩' else 'baby' end ) from userinfo2
3、实际案例扯淡
1、一般论坛中的用户等级
论坛中用户的等
case BBSlevel
when 1 then '骨灰'
when 2 then '大虾'
when 3 then '菜鸟'
end
2、订单表中,统计每个销售员的总销售金额,列出销售员名、总销售金额、称号(>10W金牌,>5W银牌,>1W铜牌,否则普通)
3、电商用户 根据用户消费总额 予以不同的等级
4、游戏行业 玩家等级
单号 金额
RMB1 10
RMB2 20
RMB3 -30
RMB4 -10
将上面的表输出为如下的格式:
单号 收入 支出
RMB1 10 0
RMB2 20 0
RMB3 0 30
RMB4 0 10
- select number,
- (
- case
- when amount > 0 then amount
- else 0
- end
- ) 收入,
- (
- case
- when amount < 0 then abs(amount)
- else 0
- end
- ) 支出
- from test
select number, ( case when amount > 0 then amount else 0 end ) 收入, ( case when amount < 0 then abs(amount) else 0 end ) 支出 from test