Presto SQL中如何按天分组计算布尔列的true值占比
解决方案
你可以使用条件聚合的方式实现需求,无需按column1分组,直接在按日期分组后统计对应布尔值的记录数即可,完整Presto SQL如下:
SELECT date_format(from_unixtime(time), '%Y-%m-%d') AS ds, ROUND(COUNT_IF(column1 = TRUE) * 100.0 / COUNT(*), 1) AS true_ratio FROM tbl GROUP BY date_format(from_unixtime(time), '%Y-%m-%d') ORDER BY ds DESC
逻辑说明
COUNT_IF(column1 = TRUE):统计每日column1为true的总记录数COUNT(*):统计当日所有记录总数,自动覆盖true、false两类数据- 乘以
100.0是为了规避Presto整数除法默认取整的问题,ROUND(xxx,1)用于保留1位小数,和要求的输出格式匹配 - 分组仅保留日期维度,最终每日只会输出1条记录
如果你的表中可能存在column1为NULL的场景,且需要排除NULL值参与统计,可将总计数逻辑调整为COUNT_IF(column1 IS NOT NULL)即可。
内容的提问来源于stack exchange,提问作者James Wierzba
相关产品推荐
相关产品推荐

