【mysql】rollup 统计集合
发布日期:2021-06-30 21:35:37 浏览次数:2 分类:技术文章

本文共 1209 字,大约阅读时间需要 4 分钟。

数据汇总

在使用TimescaleDB数据库并做数据聚合时

SELECT 	   labels,       count(*) as sample_count,       avg(elapsed) as elapsed_avg,       percentile_cont(0.5) WITHIN GROUP (ORDER BY elapsed) as elapsed_50pcFROM     report_sampleWHERE      task_id = '63e26fe1821d45f5a1901825b1cf5dd0'group by labels;

得到的结果是

在这里插入图片描述

需要将每一列的数据做一个汇总计算,可以load到数据后在代码中进行计算,但是以上数据有个问题,即elapsed_50pc 数据获取的是中位数,在代码中无法根据获取的group by数据计算得处汇总的数据中位数

ROLLUP

PostgreSQL ROLLUP 是group by 的子句,是生成多个分组集合的快捷功能

ROLLUP假设输入列之间存在层次结构,从而生成有意义的所有分组集合

这就是为什么ROLLUP经常用于生成报表的小计和总计

修改执行的sql语句

SELECT        labels,       count(*) as sample_count,       avg(elapsed) as elapsed_avg,       percentile_cont(0.5) WITHIN GROUP (ORDER BY elapsed) as elapsed_50pcFROM     report_sampleWHERE      task_id = '63e26fe1821d45f5a1901825b1cf5dd0'group by ROLLUP(labels);

可以得出以下结果

在这里插入图片描述

很明显最后一行计算出了汇总到数据

ps:ROLLUP支持不同层级的汇总集合

CASE

但是发现最后一行的labels 为null,需要增加默认的字段信息

SELECT       CASE WHEN labels is not null THEN labels ELSE 'TOTLE' END AS labels,       count(*) as sample_count,       avg(elapsed) as elapsed_avg,       percentile_cont(0.5) WITHIN GROUP (ORDER BY elapsed) as elapsed_50pcFROM     report_sampleWHERE      task_id = '63e26fe1821d45f5a1901825b1cf5dd0'group by ROLLUP(labels);

得到的结果如下

在这里插入图片描述

搞定

转载地址:https://lluozh.blog.csdn.net/article/details/107072008 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【mysql】大数据量数据读取
下一篇:【Flask】before_first_request与processes

发表评论

最新留言

很好
[***.229.124.182]2024年04月15日 03时53分29秒