最近写了一个sql,才发现有些情况不能用case 列名 when
(case ts.score when ts.score BETWEEN 9 and 10 then '优' when ts.score BETWEEN 8 and 8.9 then '良' when ts.score BETWEEN 7 and 7.9 then '中' else '差' END ) score_type,
我发现这样写查出来的结果一直走的是else的条件
后来百度了一下 发现这两种写法是有一定的差别的
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
这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。
还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。
后来我用搜索函数这种写法写
CASE WHEN score BETWEEN 9 AND 10 THEN '优' WHEN score BETWEEN 8 AND 8.9 THEN '良' WHEN score BETWEEN 7 AND 7.9 THEN '中' ELSE '差' END