这篇说说条件表达式的语法和示例。
| 表达式 | 语法 | 说明 |
| 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。 |
| NULLIF 表达式 | NULLIF(expression1, expression2) | 比较两个表达式的值是否相等。如果相等,则返回 null,否则返回第一个表达式的值。 |
| TRY 表达式 | TRY(expression) | 捕获异常信息,使得系统继续执行查询和分析操作。 |
| COALESCE 表达式 | COALESCE(expression1, expression2…) | 获取多个表达式中的第一个非 NULL 值。 |
一、CASE WHEN 语法
CASE WHEN 语法用于对数据进行归类。
三、参数说明
| 参数 | 说明 |
| condition | 条件表达式。 |
| result | 返回结果。 |
五、示例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 pvGROUP BY http_user_agent
六、示例2
统计不同请求时间的分布情况。
* |SELECT CASE WHEN request_time < 0.001 then 't0.001' WHEN request_time < 0.01 then 't0.01' WHEN request_time < 0.1 then 't0.1' WHEN request_time < 1 then 't1' ELSE 'overtime' END AS request_time, count(*) AS pvGROUP BY request_time
七、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
十一、NULLIF 表达式
NULLIF 表达式用于比较两个表达式的值是否相等。如果相等,则返回 null,否则返回第一个表达式的值。
十二、语法
NULLIF(expression1, expression2)
十三、参数说明
| 参数 | 说明 |
| expression | 任何有效的标量表达式。 |
十四、示例
判断 server_addr、http_host 两个字段的值是否相同。当不相同时,返回 server_addr 字段的值。
* | SELECT NULLIF(server_addr,http_host)
十五、TRY 表达式
TRY 表达式用于捕获异常信息,使得系统继续执行查询和分析操作。
十六、语法
TRY(expression)
十七、参数说明
| 参数 | 说明 |
| expression | 任何类型的表达式。 |
十八、示例
当执行 regexp_extract 函数发生异常时,try函数会捕获异常信息并继续查询和分析操作,返回查询和分析结果。
* | SELECT TRY(regexp_extract(uri, '.*\\/(index.*)', 1)) AS file, count(*) AS count GROUP BY file
十九、COALESCE 表达式
COALESCE 表达式用于获取多个表达式中的第一个非 NULL 值。
20、语法
COALESCE(expression1, expression2…)
21、参数说明
| 参数 | 说明 |
| expression | 任何有效的标量表达式。 |
22、示例
* | select COALESCE(null, 'test')