【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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月15日 03时53分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Django + REST学习笔记
2019-04-30
【转载】将Ubuntu16.04 中gedit在仅显示一个文件时显示文件名tab
2019-04-30
fstream 对象多次使用时注意clear
2019-04-30
调试 LenaCV 3D Camera (Linux)
2019-04-30
OpenCV杂记 - Mat in C++
2019-04-30
location区段
2019-04-30
nginx访问控制、基于用户认证、https配置
2019-04-30
SaltStack
2019-04-30
linux内存的寻址方式
2019-04-30
ubunut16.04的pip3出现问题,重新安装pip3
2019-04-30
how2heap-double free
2019-04-30
how2heap-fastbin_dup_consolidate
2019-04-30
orw_shellcode_模板
2019-04-30
[fmt+shellcode]string
2019-04-30
fmt在bss段(neepusec_easy_format)
2019-04-30
python 函数式编程
2019-04-30