在SQL中,我们可以使用 CASE 语句来实现类似于其他编程语言中的 if...then...else 结构。CASE 语句可以用于 SELECT, WHERE, 和 ORDER BY 子句中,并且可以嵌套使用。

下面是一些基本的 CASE 语句的例子,用来帮助你理解如何在SQL查询中使用条件逻辑。

示例1: 基本的 CASE 使用

假设我们有一个 employees 表格,包含 salary 字段,我们想要根据薪资来分类员工。

SELECT 
    employee_id,
    salary,
    CASE 
        WHEN salary > 50000 THEN 'High Salary'
        WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium Salary'
        ELSE 'Low Salary'
    END AS Salary_Level
FROM employees;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

这个查询将返回每个员工的 ID, 薪资以及根据薪资范围定义的薪资等级。

示例2: CASE 在 WHERE 子句中的使用

如果我们想要找出所有高薪员工(薪资大于 50000),我们可以这样做:

SELECT *
FROM employees
WHERE CASE 
        WHEN salary > 50000 THEN 1
        ELSE 0
    END = 1;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

这里,CASE 语句的结果被用来过滤记录。

示例3: 使用 CASE 与聚合函数

假设我们需要计算不同薪资级别的平均薪资:

SELECT 
    CASE 
        WHEN salary > 50000 THEN 'High Salary'
        WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium Salary'
        ELSE 'Low Salary'
    END AS Salary_Level,
    AVG(salary) AS Average_Salary
FROM employees
GROUP BY 
    CASE 
        WHEN salary > 50000 THEN 'High Salary'
        WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium Salary'
        ELSE 'Low Salary'
    END;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

这个查询会返回每个薪资等级的平均薪资。

示例4: 嵌套 CASE 语句

如果需要更复杂的逻辑判断,可以嵌套 CASE 语句:

SELECT 
    employee_id,
    salary,
    CASE 
        WHEN salary > 50000 THEN 'High Salary'
        ELSE 
            CASE 
                WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium Salary'
                ELSE 'Low Salary'
            END
    END AS Salary_Level
FROM employees;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.