最近在开发中遇到一个业务想了好久写了很多代码都解决不了,最后发现一句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的理解相关推荐

  1. IsNull 和 SQL语句中CASE WHEN用法

    [转]IsNull 和 SQL语句中CASE WHEN用法收藏   [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL     使用指定的替换值替换   NULL.      ...

  2. SQL语句中CASE WHEN的使用实例

    转载:https://blog.csdn.net/haiross/article/details/46412581 SQL中的CASE使用方法 Case 具有两种格式.简单 Case 函数和 Case ...

  3. Sql语句中 case when .. 的两种写法

    在 SQL查询语句中, case 语句的两种写法(SqlServer 2005 下测试通过): 1. select (case 字段1  when a then 0  when b then 1  e ...

  4. SQL语句中 Case具有两种格式:简单Case函数和Case搜索函数

    转自:http://blog.csdn.net/IBM_hoojo/article/details/5546868 Case具有两种格式.简单Case函数和Case搜索函数.  --简单Case函数 ...

  5. sql语句中case when then 用法

    Case具有两种格式:简单Case函数和Case搜索函数. 一:简单Case函数 (ELSE'其他')去掉则显示空 缺点不在条件范围内显示不出来原有数值 SELECTCASE SPECIAL_TYPE ...

  6. sql语句中case_SQL中的CASE语句

    sql语句中case The case statement in SQL returns a value on a specified condition. We can use a Case sta ...

  7. sql语句中的case语句

    sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让我们看一下CASE的语法.在一般的SELECT中,其语法格 ...

  8. 转在同一个sql语句中如何写不同条件的count数量

    今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...

  9. SQL语句中计算百分比

    SQL语句中计算百分比  A.TOTAL_COUNT TOTALCOUNT,    A..QUES_COUNT  QUESCOUNT,    CASE WHEN TOTAL_COUNT = QUES_ ...

最新文章

  1. 聊聊Mysql的那些破事儿
  2. 第一次,触碰Web App项目,栽过的那些坑。
  3. 一个空的C++类中有什么
  4. View Components as Tag Helpers,离在线模板编辑又进一步
  5. 聚焦效率与目标差距,数据才是远程办公的内核!
  6. 带栩字的优美古诗句_带栩字的名字_以栩字起名-尚名网
  7. php tp框架选择题,thinkPHP框架单元测试库tpunit用法示例
  8. 惨痛教训,事实证明ACER 4710无法使用双芯片的内置蓝牙
  9. sqlmap简单用法
  10. JavaScript面试大全(二)
  11. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
  12. Oracle-创建服务器参数文件
  13. 我的在校项目:校园类app
  14. 孙式太极拳的站桩(作者:孙剑云)
  15. jekyll搭建博客
  16. 注解-Annotation
  17. 脑裂问题以及如何避免
  18. Cicero:一个单细胞染色质可及性实验可视化R包
  19. 机房环境监控系统的作用,环境与设备监控系统的作用
  20. 怎么引流微信 ,QQ,抖音,淘宝,微博,Facebook好友

热门文章

  1. python运行selenium时浏览器闪退情况:
  2. 小猫咪研学之K8S基本介绍
  3. 喵星球上的点名——记一个用广义SAM根号维护多串的技巧
  4. 可以参考的前端网站(提高审美和创新)
  5. Raywenderlich:寻迹
  6. rj45管脚定义_以太网接口rj45引脚定义图
  7. 46.整理华子面经+笔试+排序算法
  8. 财务内部收益率用计算机怎么算,财务内部收益率的计算
  9. ubuntu18.04下YOLOV4测试和训练自己的数据集
  10. [刷题]leetcode\704_二分查找