云原生數據倉庫 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