Spark SQL sum(case when ...)统计占比

296 阅读1分钟

偶然了解到sum和case when 组合起来可以统计做一些占比查询,记录一下。

例子

假设现在想统计某个域名的状态码请求数占比,状态码code包括200,300,400,500...,每个状态码请求数times不同,现在只有每个状态码的请求数,但是不知道有多少状态码,想统计状态码是200的请求数占总请求数的占比百分数。

状态码请求数
20020
30030
40040
50050
......

最简单的做法是先统计一次code = 200的请求数,得到20,再对所有的状态码请求数求和得到总的请求数,然后二者相除得到占比,这里介绍一下一种更简单的方式:

select concat(round(sum(case when code = 200 then times else 0 end)/sum(times),3)*100,'%') as ratio

说明:sum(case when code = 200 then times else 0 end) 即统计状态码200的请求数,注意这里的case when 最后的end不能少,sum(times)统计所有的请求数,一个SQL即可搞定,不需要分两次查询统计。