条件表达式

云原生数据仓库 AnalyticDB PostgreSQL 版兼容PostgreSQL条件表达式。本文简单列举云原生数据仓库 AnalyticDB PostgreSQL 版兼容的条件表达式及用法示例。

PostgreSQL条件表达式的详细使用方法,请参见PostgreSQL官方文档:条件表达式

使用限制

COALESCEGREATESTLEAST在语法上类似于函数,但它们不是普通的函数,因此不能使用显式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,包含salarybonus列,根据薪资等级分配奖金比例。

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)

功能描述

  • expression1expression2是需要比较的两个值或表达式。

  • 如果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