条件表达式
云原生数据仓库 AnalyticDB PostgreSQL 版兼容PostgreSQL条件表达式。本文简单列举云原生数据仓库 AnalyticDB PostgreSQL 版兼容的条件表达式及用法示例。
PostgreSQL条件表达式的详细使用方法,请参见PostgreSQL官方文档:条件表达式。
使用限制
COALESCE、GREATEST和LEAST在语法上类似于函数,但它们不是普通的函数,因此不能使用显式VARIADIC数组参数。
CASE
CASE表达式是一种通用的条件表达式,类似于其它编程语言中的if/else语句,是一种条件控制结构,允许在查询中根据不同的条件返回不同的结果。
语法
CASE
WHEN expression = value THEN result
[WHEN expression = value THEN result ...]
[ELSE else_result]
END
简化形式:
CASE
WHEN condition THEN result
[WHEN condition THEN result ...]
[ELSE else_result]
END
功能描述
WHEN condition THEN result: 这一部分定义了条件和对应的返回结果,可以有多个这样的条件分支。
condition: 一个布尔表达式,用来测试是否为真。result: 当condition为真时返回的值。
ELSE else_result: 可选部分,如果以上所有条件都不满足,则返回
else_result。如果不包括ELSE部分且所有条件都不成立时,CASE表达式将返回 NULL。
使用示例
假设有一个员工表employees,包含salary和bonus列,根据薪资等级分配奖金比例。
SELECT name, salary,
CASE
WHEN salary < 30000 THEN salary * 0.05 -- 5% bonus for low salaries
WHEN salary BETWEEN 30000 AND 50000 THEN salary * 0.10 -- 10% for medium
ELSE salary * 0.15 -- 15% for high salaries
END AS bonus_amount
FROM employees;在这个例子中,根据员工的薪水范围,使用 CASE 表达式计算不同的奖金比例。
COALESCE
COALESCE表达式用于返回其参数列表中第一个非空的值。在处理可能含有空值的列或表达式时,可以帮助您设定一个默认值。
语法
COALESCE(value1, value2, ..., valueN)功能描述
COALESCE会从左到右评估它的参数。当遇到第一个非 NULL 的参数时,立即返回该参数的值,并停止进一步的评估。
如果所有参数都是 NULL,那么
COALESCE函数将返回 NULL。
使用示例
假设有一个员工表employees,其中一些员工的email可能为空(NULL)。
SELECT id, name, COALESCE(email, 'no_email@example.com') AS email
FROM employees;在这个查询中:
如果
email字段的值为 NULL,那么COALESCE将返回'no_email@example.com'作为默认邮箱地址。如果
email字段有实际值,那么就直接返回该邮箱地址。
NULLIF
语法
NULLIF(expression1, expression2)功能描述
expression1和expression2是需要比较的两个值或表达式。如果
expression1等于expression2,那么NULLIF返回 NULL。如果
expression1不等于expression2,则返回expression1的值。
使用示例
假设有一个订单表orders,其中包含了商品的价格和数量,计算每件商品的平均价格。
SELECT product_id,
SUM(price * quantity) / NULLIF(SUM(quantity), 0) AS average_price
FROM orders
GROUP BY product_id;在这个查询中:
如果某个商品的总数量(
SUM(quantity))为0,那么NULLIF会返回 NULL,这样在计算平均价格时就可以避免除以零的错误。如果商品有销售记录,即
SUM(quantity)不为0,NULLIF返回SUM(quantity)的值,继续正常计算平均价格。
GREATEST
用于从一系列指定的值中返回最大值。如果有多个值并列最大,它将返回其中之一。如果所有参数都是 NULL,那么 GREATEST 函数的结果也是 NULL。
语法
GREATEST(value1, value2, ..., valueN)使用示例
SELECT GREATEST(10, 20, 30); -- 返回 30
SELECT GREATEST(5, 5, 2); -- 返回 5
SELECT GREATEST(NULL, 1, 2); -- 返回 2
SELECT GREATEST(NULL, NULL); -- 返回 NULLLEAST
用于从一系列指定的值中返回最小值。如果有多个值并列最小,它将返回其中之一。如果所有参数都是 NULL,那么LEAST函数的结果也是 NULL。
语法
LEAST(value1, value2, ..., valueN)使用示例
SELECT LEAST(10, 20, 30); -- 返回 10
SELECT LEAST(5, 5, 2); -- 返回 2
SELECT LEAST(NULL, 1, 2); -- 返回 1
SELECT LEAST(NULL, NULL); -- 返回 NULL