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]

注:[]中的内容可省略

demo

demo1:
有一个名为 students 的表,其中包含学生的姓名和分数。我们想要根据学生的分数判断他们的成绩等级。我们可以使用 CASE WHEN 语句来实现:

SELECT name, score,
    CASE
        WHEN 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 BY
    CASE
        WHEN sales > 1000 THEN 1  -- 销售量大于 1000 的产品,排序值设为 1
        WHEN sales > 500 THEN 2   -- 销售量大于 500 的产品,排序值设为 2
        WHEN sales > 100 THEN 3   -- 销售量大于 100 的产品,排序值设为 3
        ELSE 4                   -- 其他销售量的产品,排序值设为 4
    END ASC,                     -- 根据排序值进行升序排序
    sales DESC;                  -- 在排序值相同的情况下,按照销售量进行降序排序

在 CASE 表达式之后添加了 , sales DESC。这样可以在排序值相同的情况下,按照销售量进行降序排序。

03-28 02:32