sql常用之CASE WHEN THEN
SQL中的 CASE 类似编程语言里的 if-then-else 语句,用做逻辑判断。可以用于SELECT语句中,也可以用在WHERE,GROUP BY 和 ORDER BY 子句;可以单独使用,也可以和聚合函数结合使用。
语法:
CASE WHEN condition1 THEN result1[WHEN condition2 THEN result2][...][ELSE result]
END [AS alias_name]
注:[]中的内容可省略
condition是一个返回布尔类型的表达式,如果表达式为TRUE,则整个函数返回相应result的值;如果表达式皆为 FALSE,则返回 ElSE 后result的值;如果省略了ELSE子句,则返回NULL。
demo
demo1:
有一个名为 students 的表,其中包含学生的姓名和分数。我们想要根据学生的分数判断他们的成绩等级。我们可以使用 CASE WHEN 语句来实现:
SELECT name, score,CASEWHEN score >= 90 THEN 'A'WHEN score >= 80 THEN 'B'WHEN score >= 70 THEN 'C'WHEN score >= 60 THEN 'D'ELSE 'F'END AS grade
FROM students;
demo2:
使用多个 WHEN THEN 子句定义了排序规则。根据销售量的不同范围,我们为产品设定了不同的排序值。销售量大于 1000 的产品排序值为 1,销售量大于 500 的产品排序值为 2,销售量大于 100 的产品排序值为 3,其他销售量的产品排序值为 4。然后,我们按照排序值进行升序排序,如果排序值相同,则按照销售量进行降序排序。
SELECT name, sales
FROM products
ORDER BYCASEWHEN sales > 1000 THEN 1 -- 销售量大于 1000 的产品,排序值设为 1WHEN sales > 500 THEN 2 -- 销售量大于 500 的产品,排序值设为 2WHEN sales > 100 THEN 3 -- 销售量大于 100 的产品,排序值设为 3ELSE 4 -- 其他销售量的产品,排序值设为 4END ASC, -- 根据排序值进行升序排序sales DESC; -- 在排序值相同的情况下,按照销售量进行降序排序
在 CASE 表达式之后添加了 , sales DESC。这样可以在排序值相同的情况下,按照销售量进行降序排序。