条件表达式主要用于表达分支逻辑。本文为您介绍如何使用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返回的是它第一个不是空值的参数。只有在所有参数都为空值的情况下,才会返回空值。表达形式如下。
COALESCE(value1, value2[, ...])      

NULLIF

函数NULLIF在value1value2相等时,返回NULL,否则返回value1。表达形式如下。
NULLIF(value1, value2)                  

TRY

函数TRY会捕获expression计算过程中抛出的异常,并返回NULLTRY捕获的异常包括如下几类:
  • 除零异常,如x/0
  • 类型转换错误。
  • 数值越界。
通常和COALESCE一起使用,以便在出错时,返回默认值。表达形式如下。
TRY(expression)                 
示例:
SELECT COALESCE(TRY(total_cost / packages), 0) AS per_package FROM shipping;

COALESCE和TRY搭配使用,当packages=0抛出异常时,返回默认值(0)。

per_package
-------------
           4
          14
           0
          19
(4 rows)