SQL里CASE 语句允许数分同学在查询中执行条件逻辑。了解如何使用其功能可以显著增强工作效率和数据处理的能力。在本文中,我们将深入探讨 SQL CASE 语句,涵盖其语法、各种用例,并提供实用的代码示例来巩固大家的理解。
Part1-了解 SQL CASE 语句
CASE 语句提供了在 SQL 查询中执行条件逻辑的方法。它评估一组条件并根据第一个评估为 true 的条件返回结果。
CASE语句的语法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
以下是每个部分的细分:
Part2-深入了解常见用例。
将表达式与一组简单值进行比较以确定结果。
SELECT
order_id,
CASE customer_id
WHEN 1 THEN 'VIP1'
WHEN 2 THEN 'VIP2'
WHEN 3 THEN 'VIP3'
ELSE 'Regular'
END AS customer_type
FROM orders;
判定多个条件并根据第一个为 true 的条件返回结果。
order_id,
CASE
WHEN order_amount > 1000 THEN 'High'
WHEN order_amount > 500 THEN 'Medium'
ELSE 'Low'
END AS order_priority
FROM orders;
3. 在 WHERE 子句中使用 CASE
使用 SQL CASE 语句根据特定条件过滤数据。
SELECT *
FROM customers
WHERE CASE
WHEN country = 'China' THEN sales_region = 'Asia'
WHEN country = 'UK' THEN sales_region = 'Europe'
ELSE FALSE
END;
4. 将 CASE 与聚合函数结合使用
执行case语句,进行聚合数据。
SELECT
department,
COUNT(CASE WHEN salary > 50000 THEN 1 END) AS high_salary_count,
COUNT(CASE WHEN salary <= 50000 THEN 1 END) AS low_salary_count
-- 如果薪水大于50000,则为高收入人群,若薪水小于50000,则为低收入人群
FROM employees
GROUP BY department;
5. 嵌套 CASE 语句
相互嵌套处理更复杂的条件。
SELECT
order_id,
CASE
WHEN payment_status = 'paid' THEN
CASE
WHEN shipping_status = 'shipped' THEN 'Delivered'
ELSE 'Processing'
--限定支付状态(payment_status )为支付完成,并且快递状态为“已发货”
END
ELSE 'Pending'
END AS order_status
FROM orders;
6. 在 JOIN 条件中使用 CASE
根据特定条件进行多表关联。
SELECT
o.order_id,
o.order_date,
c.customer_name
FROM orders o
JOIN customers c
ON CASE
WHEN o.customer_id = 1 THEN c.customer_id = o.customer_id
WHEN o.customer_id = 2 THEN c.country = 'China'
ELSE c.country = 'UK'
END;
三、结论
掌握CASE 语句使我们能够直接在 SQL 查询中执行复杂的条件逻辑。无论对数据进行分类、对结果进行优先级排序,还是进行过滤,CASE 语句都是一个宝贵工具。通过了解其语法并探索实际示例,可以在数据库操作中充分利用 SQL CASE 语句的潜力。