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

CASE WHEN语法

CASE WHEN语法用于对数据进行归类。

  • 语法
    CASE WHEN condition1 THEN result1
         [WHEN condition2 THEN result2]
         [ELSE result3]
    END
  • 示例
    • 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
    • 统计不同请求时间的分布情况。
      • 查询和分析语句
        * | 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,则返回true_value列,否则返回null。
      if(condition, true_value)
    • 如果判断condition为true,则返回true_value列,否则返回false_value列。
      if(condition, true_value, false_value)
  • 示例

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

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

COALESCE语法

COALESCE语法用于返回多个列中的第一个非null的值。
  • 语法
    coalesce(expression1, expression2, expression3, expression4)
  • 示例

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

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

NULLIF语法

NULLIF语法用于比较两列值是否相同。如果相同,则返回null,否则返回expression1对应的值。

  • 语法
    nullif(expression1, expression2)
  • 示例
    判断client_iphost两个字段的值是否相同。
    • 查询和分析语句
      * | SELECT nullif(client_ip,host)
    • 查询和分析结果

      client_iphost字段值不同时,返回client_ip字段的值。

      nullif语法

TRY语法

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

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