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

表达式 说明
CASE WHEN表达式 通过条件判断,对数据进行归类。
IF表达式 通过条件判断,对数据进行归类。
COALESCE表达式 返回多个表达式中第一个非NULL的值。
NULLIF表达式 比较两个表达式的值是否相等。如果相等,则返回null,否则返回第一个表达式的值。
TRY表达式 捕获异常信息,使得系统继续执行查询和分析操作。

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语法