条件表达是主要用于表达分支逻辑。Presto 支持如下几种条件表达式形式:

  • CASE 表达式
    在标准SQL中, CASE表达式有两种不同的形式,如下所示:
    CASE expression
    	WHEN <value|condition> THEN result
    	[ WHEN ... ]
    	[ ELSE result]
    END
    

    CASE语句将比较expressionvalue|condition中的值/条件,如果符合(值相等或条件匹配)则返回结果。

    示例:
    --- 比较值
    SELECT a,
           CASE a
               WHEN 1 THEN 'one'
               WHEN 2 THEN 'two'
               ELSE 'many'
           END
    
    --- 比较条件表达式
    SELECT a, b,
           CASE
               WHEN a = 1 THEN 'aaa'
               WHEN b = 2 THEN 'bbb'
               ELSE 'ccc'
           END
    
  • IF 函数
    IF函数是一个简单的比较函数,用于简化二值比较逻辑的写法。其表达形式如下:
    IF(condition, true_value, [false_value])
    

    如果condition返回TRUE,则函数返回true_value,否则返回 false_value。其中,false_value可选,不设置则返回NULL

  • COALESCE
    COALESCE函数返回参数列表中第一个不是 NULL的参数。其表达形式如下:
    COALESCE(value1, value2[, ...])
    
  • NULLIF
    NULLIF函数在 value1value2相等时,返回 NULL,否则返回 value1。函数使用方法如下:
    NULLIF(value1, value2)
    
  • TRY
    TRY函数会捕获 expression计算过程中抛出的异常,并返回 NULLTRY捕获的异常包括如下几类:
    • 除零异常,如x/0
    • 类型转换错误
    • 数值越界
    通常和 COALESCE一起使用,以便在出错时,返回默认值。使用方法如下:
    TRY(expression)
    
    示例:
    --- COALESCE和TRY搭配使用,在packages=0,抛出除零异常时,返回默认值(0)。
    SELECT COALESCE(TRY(total_cost / packages), 0) AS per_package FROM shipping;
    
    per_package
    -------------
       		4
       	   14
       		0
       	   19
    (4 rows)