对SQL语句中case when...then...else...end的理解
最近在开发中遇到一个业务想了好久写了很多代码都解决不了,最后发现一句SQL语句就能完美解决了。
是这样的,商城中各商品都有对应的市场价marketprice,存在对应的数据表里shop_goods。
根据客户的会员等级RANK_ID不同可以给予不同的优惠价USER_PRICE,在页面呈现展示,重要的是用户点击后要按照价格高低排序
,所以要在一条sql语句中执行。
而这些价格是以RANK_ID(会员等级)-GOODS_ID(商品ID)-USER_PRICE(会员售价)的逻辑关系存储在另一张表rank_price中。
以下是对应的表,和我写的SQL语句
shop_goods rank_price
SELECT sg.id,sg.marketprice,(CASE WHEN rp.USER_PRICE IS NOT NULL THEN rp.USER_PRICE ELSE sg.marketprice END) AS marketpriceFROM shop_goods AS sg LEFT JOIN rank_price as rp ON sg.id = rp.GOODS_ID AND rp.RANK_ID = 2 ORDER BY marketprice ASC;
假设用户是银卡会员(RANK_ID = 2),取得对应的优惠价并将价格按升(或降)排序
重点就在这句:
(CASE WHEN rp.USER_PRICE IS NOT NULL THEN rp.USER_PRICE ELSE sg.marketprice END) AS marketprice
用中文解释大概是这个意思,当用户会员等级对应的商品优惠价不为空即存在优惠价时(case when…is not null),就把优惠价赋值给marketprice字段中对应的值(then…as…),如果商品没有优惠价时还是取原来的市场价(else…as…),结束判断end。
这是我第一次遇到场景用这方法解决,当然还会有其他用法,很多大神也都有发掘,只是想在这里记录下自己的理解过程。
SQL利用Case When Then多条件判断
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
WHEN 条件3 THEN 结果3
WHEN 条件4 THEN 结果4
.........
WHEN 条件N THEN 结果N
ELSE 结果X
END
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
例如:
SELECT id, name, cj, (CASE WHEN cj < 60 THEN '不及格' WHEN cj BETWEEN 60 AND 90 THEN '良好' WHEN cj > 90 THEN '优秀' END) AS 状态
FROM stud
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
--比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a') THEN '第二类'
ELSE'其他' END
对SQL语句中case when...then...else...end的理解相关推荐
- IsNull 和 SQL语句中CASE WHEN用法
[转]IsNull 和 SQL语句中CASE WHEN用法收藏 [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL 使用指定的替换值替换 NULL. ...
- SQL语句中CASE WHEN的使用实例
转载:https://blog.csdn.net/haiross/article/details/46412581 SQL中的CASE使用方法 Case 具有两种格式.简单 Case 函数和 Case ...
- Sql语句中 case when .. 的两种写法
在 SQL查询语句中, case 语句的两种写法(SqlServer 2005 下测试通过): 1. select (case 字段1 when a then 0 when b then 1 e ...
- SQL语句中 Case具有两种格式:简单Case函数和Case搜索函数
转自:http://blog.csdn.net/IBM_hoojo/article/details/5546868 Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 ...
- sql语句中case when then 用法
Case具有两种格式:简单Case函数和Case搜索函数. 一:简单Case函数 (ELSE'其他')去掉则显示空 缺点不在条件范围内显示不出来原有数值 SELECTCASE SPECIAL_TYPE ...
- sql语句中case_SQL中的CASE语句
sql语句中case The case statement in SQL returns a value on a specified condition. We can use a Case sta ...
- sql语句中的case语句
sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让我们看一下CASE的语法.在一般的SELECT中,其语法格 ...
- 转在同一个sql语句中如何写不同条件的count数量
今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...
- SQL语句中计算百分比
SQL语句中计算百分比 A.TOTAL_COUNT TOTALCOUNT, A..QUES_COUNT QUESCOUNT, CASE WHEN TOTAL_COUNT = QUES_ ...
最新文章
- 聊聊Mysql的那些破事儿
- 第一次,触碰Web App项目,栽过的那些坑。
- 一个空的C++类中有什么
- View Components as Tag Helpers,离在线模板编辑又进一步
- 聚焦效率与目标差距,数据才是远程办公的内核!
- 带栩字的优美古诗句_带栩字的名字_以栩字起名-尚名网
- php tp框架选择题,thinkPHP框架单元测试库tpunit用法示例
- 惨痛教训,事实证明ACER 4710无法使用双芯片的内置蓝牙
- sqlmap简单用法
- JavaScript面试大全(二)
- HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
- Oracle-创建服务器参数文件
- 我的在校项目:校园类app
- 孙式太极拳的站桩(作者:孙剑云)
- jekyll搭建博客
- 注解-Annotation
- 脑裂问题以及如何避免
- Cicero:一个单细胞染色质可及性实验可视化R包
- 机房环境监控系统的作用,环境与设备监控系统的作用
- 怎么引流微信 ,QQ,抖音,淘宝,微博,Facebook好友