条件表达式
云原生数据仓库 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); -- 返回 NULL
LEAST
用于从一系列指定的值中返回最小值。如果有多个值并列最小,它将返回其中之一。如果所有参数都是 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