本文介绍条件表达式的基本语法和示例。

表达式 语法 说明
CASE WHEN表达式 CASE WHEN condition1 THEN result1

[WHEN condition2 THEN result2]

[ELSE result3]

END

通过条件判断,对数据进行归类。
IF表达式 IF(condition, result1) 如果condition为true,则返回result1,否则返回null。
IF(condition, result1, result2) 如果condition为true,则返回result1,否则返回result2
COALESCE表达式 COALESCE(expression1, expression2, expression3...) 返回多个表达式中第一个非null的值。
NULLIF表达式 NULLIF(expression1, expression2) 比较两个表达式的值是否相等。如果相等,则返回null,否则返回第一个表达式的值。
TRY表达式 TRY(expression) 捕获异常信息,使得系统继续执行查询和分析操作。

CASE WHEN表达式

CASE WHEN表达式用于对数据进行归类。

语法

CASE WHEN condition1 THEN result1
     [WHEN condition2 THEN result2]
     [ELSE result3]
END

参数说明

参数 说明
condition 条件表达式。
result1 返回结果。

示例

  • 示例1:从http_user_agent字段值中提取浏览器信息,归为Chrome、Safari和unknown三种类型并计算三种类型对应的访问PV。
    • 查询和分析语句
      * |
      SELECT
        CASE
          WHEN http_user_agent like '%Chrome%' then 'Chrome'
          WHEN http_user_agent like '%Safari%' then 'Safari'
          ELSE 'unknown'
        END AS http_user_agent,
        count(*) AS pv
      GROUP BY
        http_user_agent
    • 查询和分析结果case when
  • 示例2:统计不同请求时间的分布情况。
    • 查询和分析语句
      * |
      SELECT
        CASE
          WHEN request_time < 10 then 't10'
          WHEN request_time < 100 then 't100'
          WHEN request_time < 1000 then 't1000'
          WHEN request_time < 10000 then 't10000'
          ELSE 'large'
        END AS request_time,
        count(*) AS pv
      GROUP BY
        request_time
    • 查询和分析结果case when

IF表达式

IF表达式用于对数据进行归类,类似于CASE WHEN表达式。

语法

  • 如果condition为true,则返回result1,否则返回null。
    IF(condition, result1)
  • 如果condition为true,则返回result1,否则返回result2
    IF(condition, result1, result2)

参数说明

参数 说明
condition 条件表达式。
result 返回结果

示例

计算状态码为200的请求占所有请求的比例。

  • 查询和分析语句
    * |
    SELECT
      sum(IF(status = 200, 1, 0)) * 1.0 / count(*) AS status_200_percentag
  • 查询和分析结果IF语法

COALESCE表达式

COALESCE表达式用于返回多个表达式中第一个非null的值。

语法

COALESCE(expression1, expression2, expression3...)

参数说明

参数 说明
expression 任何类型的表达式。

示例

计算昨天消费金额与上月同一天的比值。

  • 查询和分析语句
    * |
    SELECT
      compare("昨天消费金额", 604800) AS diff
    FROM  (
        SELECT
          COALESCE(sum(PretaxAmount), 0) AS "昨天消费金额"
        FROM log
      )
  • 查询和分析结果coalesce语法
    • 6514393413.0表示昨天的消费金额。
    • 19578267596.0表示上月同一天的消费金额。
    • 0.33273594719539659表示昨天与上月同一天的消费金额比值。

NULLIF表达式

NULLIF表达式用于比较两个表达式的值是否相等。如果相等,则返回null,否则返回第一个表达式的值。

语法

NULLIF(expression1, expression2)

参数说明

参数 说明
expression 任何有效的标量表达式。

示例

判断client_iphost两个字段的值是否相同。当不相同时,返回client_ip字段的值。

  • 查询和分析语句
    * | SELECT NULLIF(client_ip,host)
  • 查询和分析结果nullif语法

TRY表达式

TRY表达式用于捕获异常信息,使得系统继续执行查询和分析操作。

语法

TRY(expression)

参数说明

参数 说明
expression 任何类型的表达式。

示例

当执行regexp_extract函数发生异常时,try函数会捕获异常信息并继续查询和分析操作,返回查询和分析结果。
  • 查询和分析语句
    * |
    SELECT
      TRY(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file,
      count(*) AS count
    GROUP BY
      file
  • 查询和分析结果try语法