全部產品
Search
文件中心

AnalyticDB:條件運算式

更新時間:Nov 08, 2024

AnalyticDB for PostgreSQL相容PostgreSQL條件運算式。本文簡單列舉AnalyticDB for 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