本文介绍条件表达式的语法和示例。
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
- 查询和分析结果
- 查询和分析语句
- 统计不同请求时间的分布情况。
- 查询和分析语句
* | 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
- 查询和分析结果
- 查询和分析语句
- 从http_user_agent字段值中提取浏览器信息,归为Chrome、Safari和unknown三种类型并计算三种类型对应的访问PV。
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)
- 如果判断condition为true,则返回true_value列,否则返回null。
- 示例
计算状态码为200的请求占所有请求的比例。
- 查询和分析语句
* | SELECT sum(if(status =200,1,0))*1.0 / count(*) AS status_200_percentage
- 查询和分析结果
- 查询和分析语句
COALESCE语法
- 语法
coalesce(expression1, expression2, expression3, expression4)
- 示例
计算昨天消费金额与上月同一天的比值。
- 查询和分析语句
* | SELECT compare("昨天消费金额", 604800) AS diff FROM (SELECT coalesce(sum(PretaxAmount), 0) AS "昨天消费金额" FROM website_log)
- 查询和分析结果
- 6514393413.0表示昨天的消费金额。
- 19578267596.0表示上月同一天的消费金额。
- 0.33273594719539659表示昨天与上月同一天的消费金额比值。
- 查询和分析语句
NULLIF语法
NULLIF语法用于比较两列值是否相同。如果相同,则返回null,否则返回expression1对应的值。
- 语法
nullif(expression1, expression2)
- 示例
判断client_ip、host两个字段的值是否相同。
- 查询和分析语句
* | SELECT nullif(client_ip,host)
- 查询和分析结果
当client_iphost字段值不同时,返回client_ip字段的值。
- 查询和分析语句
TRY语法
TRY语法用于捕获异常信息,使得系统继续执行查询和分析操作。
- 语法
try(expression)
- 示例
当执行regexp_extract函数发生异常时,try函数会捕获异常信息并继续查询和分析操作,返回查询和分析结果。
- 查询和分析语句
* | SELECT try(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file, count(*) AS count GROUP BY file
- 查询和分析结果
- 查询和分析语句