case when用法_SQL的case when then else end语句的用法,刚入行小伙伴再也不用头疼啦...

在我们日常生活中,作为一个程序猿,如果不会写SQL,怎么去开发?往往写SQL才是通往幸福的'真谛',但是作为初入行的小伙伴们,往往SQL是最让人头疼的东西,有很多小伙伴只会简单的一些操作语句,有时候工作中会遇到一些对已知的数据进行逻辑分组或者进行数据分析和通过条件控制语句嵌套函数达到自己想要的结果等。简单来讲就是我们需要多条件判断。

下面我们就来了解一下case...when...then...else...end在MySQL中的用法:

SQL命令中的case...when...then...else...end条件查询(不同于where) 与 类型转换的用法,case...when...then...else...end,是在from前面,可以改变记录中某字段的值,不能决定是否显示该记录;where是在from后面,不可以改变记录中某字段的值,但可以决定是否显示该记录。case...when...then...else...end,可用于对同一记录的多个字段求和,带分支判断。

下面我们拿具体的例子来说明一下他的具体用法:

需求:

商城中各商品都有对应的市场价marketprice,存在对应的数据表里shop_goods。根据客户的会员等级RANK_ID不同可以给予不同的优惠价USER_PRICE,在页面呈现展示,重要的是用户点击后要按照价格高低排序

,所以要在一条sql语句中执行。而这些价格是以RANK_ID(会员等级)-GOODS_ID(商品ID)-USER_PRICE(会员售价)的逻辑关系存储在另一张表rank_price中。

现在我们创建两张表shop_goods表和rank_price表

shop_goods

9b372d9894003326df4ab9378344bcd4.png

rank_price

99d25baaaac83aaa14ad76ea45369ce8.png

下面假设用户是银卡会员(RANK_ID = 2),取得对应的优惠价并将价格按升(或降)排序;

我们的SQL语句应该这样写:

6ca3f60ab7db44f5b354948e6aa6c2c9.png

贴SQL:

SELECT sg.id,       sg.market_price as 普通价格,       rp.rank_id,       (CASE WHEN rp.USER_PRICE IS NOT NULL THEN rp.USER_PRICE ELSE sg.market_price END) AS 会员价格FROM txendorsement.shop_goods AS sg         LEFT JOIN txendorsement.rank_price as rp ON sg.id = rp.GOODS_ID where rp.RANK_ID = 2ORDER BY 会员价格 ASC;

我们的执行结果:

0195c59c926d1834434c6c19e91ebc66.png

这样我们就可以拿到我们需要展示给会员用户的价格啦~~重点就在这句:

(CASE WHEN rp.USER_PRICE IS NOT NULL THEN rp.USER_PRICE ELSE sg.market_price END) AS 会员价格

用中文解释大概是这个意思,当用户会员等级对应的商品优惠价不为空即存在优惠价时(case when…is not null),就把优惠价赋值给marketprice字段中对应的值(then…as…),如果商品没有优惠价时还是取原来的市场(else…as…),结束判断end。

看到这里小伙伴你搞懂了么?如果没有搞懂我们接下来再举一个烂大街的例子,哈哈,这个例子百度上面一搜一大堆。废话不多说直接上表:

有一个sex表,表中字段分别有(id主键,sex性别(1代表男生,2代表女生),age年龄,class班级)

需求:查询班级为3班,年龄为22岁的同学,要求:1显示为‘男生’2显示为‘女生’。

22cb3652923d009413eceefb0d316e79.png

SQL:

a70e36f361dcb5e3a66cfb8e236f1a01.png

select id,       case sex           when '1' then '男'           when '2' then '女'           else '其他' end as 性别from txendorsement.sexwhere class = 3  and age = 22

执行结果:

91fcc1fda7e3d0c6ae6fded52acd2d82.png

好啦,两个例子已经举例完成,希望可以帮助小伙伴,如果您有不明白的还请留言,每天会不定时回复的,也希望有出处的地方欢迎大神及时指点!!!

最后在唠叨一点:

Case具有两种格式。简单Case函数和Case搜索函数。

--简单Case函数

CASE sex

         WHEN '1' THEN '男'

         WHEN '2' THEN '女'

ELSE '其他' END

--Case搜索函数

CASE WHEN sex = '1' THEN '男'

         WHEN sex = '2' THEN '女'

ELSE '其他' END

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值