支持CASE WHEN语法,对连续数据进行归类。例如,从http_user_agent中提取信息,归类成Android和iOS两种类型:

SELECT 
 CASE 
 WHEN http_user_agent like '%android%' then 'android' 
 WHEN http_user_agent like '%ios%' then 'ios' 
 ELSE 'unknown' END  
 as http_user_agent,
    count(1) as pv 
    group by  http_user_agent

样例

  • 计算状态码为200的请求占总体请求的比例:
    * | SELECT 
     sum(
     CASE 
     WHEN status =200 then 1
     ELSE 0 end
     ) *1.0 / count(1) as status_200_percentage
  • 统计不同延时区间的分布:
    * | SELECT `
     CASE
     WHEN latency < 10 then 's10'
     WHEN latency < 100 then 's100'
     WHEN latency < 1000 then 's1000'
     WHEN latency < 10000 then 's10000'
     else 's_large' end
     as latency_slot,
     count(1) as pv
     group by latency_slot

IF语法

if语法逻辑上等同于CASE WHEN语法。

CASE
     WHEN condition THEN true_value
     [ ELSE false_value ]
 END
  • if(condition, true_value)

    如果condition是true,则返回true_value这一列,否则返回null。

  • if(condition, true_value, false_value)

    如果condition是true,则返回true_value这一列,否则返回false_value这一列。

COALESCE语法

coalesce 返回多个列的第一个非Null值。

coalesce(value1, value2[,...])

NULLIF 语法

如果value1和value2相等,返回null,否则返回value1。

nullif(value1, value2)

TRY 语法

try语法可以捕获一些底层的异常,例如除0错误,返回null值。

try(expression)