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部分将会被自动忽略。
Eg:下面的sql,永远不可能得到“第二种”这个结果
CASE
WHEN kind IN ( 'a', 'b' ) THEN
'第一种'
WHEN kind IN ( 'a' ) THEN
'第二种' ELSE '其他'
END
三、sum与case结合使用,可以实现分段统计。
Eg:统计考试成绩各种分段的人数,sql语句如下:
SELECT
d.NAME 课程名,
count( * ) 考试人数,
sum( CASE e.result WHEN 1 THEN 1 ELSE 0 END ) 通过人数,
sum( CASE e.result WHEN 1 THEN 1 ELSE 0 END ) / count( * ) 通过率,
sum( CASE WHEN e.score >= 90 THEN 1 ELSE 0 END ) grade9,
sum( CASE WHEN e.score <= 89 AND e.score >= 80 THEN 1 ELSE 0 END ) grade8,
sum( CASE WHEN e.score <= 79 AND e.score >= 70 THEN 1 ELSE 0 END ) grade7,
sum( CASE WHEN e.score <= 69 AND e.score >= 60 THEN 1 ELSE 0 END ) grade6,
sum( CASE WHEN e.score <= 59 THEN 1 ELSE 0 END ) grade0
FROM
exam e
LEFT JOIN user u ON u.id = e.user_id
LEFT JOIN lesson d ON d.id = u.lesson_id
WHERE
u.deleted = 0
GROUP BY
d.id