MySQL ——group by子句使用with rollup

news/2024/10/11 16:52:23/

     group by 子句使用with rollup关键字之后,具有分组加和的功能。即:在所有的分组记录之后,自动新增一条记录,从全局计算所有记录的数据。

0 问题描述

   求出每年的学生平均成绩,及历史至今的平均成绩,结果保留两位小数。

1 数据准备

create table rollup_test
(name varchar(8)   COMMENT'',year int COMMENT'',score int COMMENT''
)CHARACTER SET utf8 COLLATE utf8_general_ci;insert into rollup_test
values ('a',2016, 85),('b',2016, 45),('c',2016, 90),('a',2015, 75),('b',2015, 90);

2 数据分析

  完成代码如下:

select `year`,round(avg(score) ,2) as avg_score
from rollup_test group by `year`
union all
select '历史至今' as `year`,round(avg(score) ,2) as avg_score
from rollup_test

方式二:利用group by with rollup 替换union all进行简化

select `year`,round(avg(score) ,2) as avg_score
from rollup_test
group by `year`
with rollup

由输出结果可知,with rollup 会自动新增一条记录:

year   avg_score
null      77.00

结果与下列代码等价

select  '历史至今' as `year`,round(avg(score) ,2) as avg_score
from rollup_test

再借助函数ifnull 或 coalesce() 空字段赋值

上述代码继续优化为:

select  coalesce (`year`,'历史至今') as `year`,round(avg(score) ,2) as avg_score
from rollup_test
group by `year`
with rollup

 输出结果为:

3 小结

     高级分组聚合指的是:聚合时涉及到rollup、cube等。使用高级分组聚合函数的作用:将union多次的作业直接分到一个作业中执行,可以减少多作业对磁盘和网络IO额的消耗。


http://www.ppmy.cn/news/1350490.html

相关文章

matlab发送串口数据,并进行串口数据头的添加,我们来看下pwm解析后并通过串口输出的效果

uintt16位的话会在上面前面加上00,16位的话一定是两个字节,一共16位的数据 如果是unint8的话就不会, 注意这里给的是13,但是现实的00 0D,这是大小端的问题,在matlanb里设置,我们就默认用这个模式…

MATLAB知识点:unifrnd函数(★★★☆☆)生成任意区间内均匀分布的随机数

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章:课后习题讲解中拓展的函数 在讲解第…

米贸搜|Facebook在购物季使用的Meta广告投放流程

一、账户简化 当广告系列开始投放后,每个广告组都会经历一个初始的“机器学习阶段”。简化账户架构可以帮助AI系统更快获得广告主所需的成效。例如: 每周转化次数超过50次的广告组,其单次购物费用要低28%;成功结束机器学习阶段的…

Vue3中Setup概述和使用(三)

一、引入Setup 1、Person.Vue 与Vue3编写简单的App组件(二) 中的区别是&#xff1a;取消data、methods等方法,而是将数据和方法定义全部放进setup中。 <template><div class"person"><h1>姓名:{{name}}</h1><h1>年龄:{{age}}</h…

Arduino中关于error: reference to ‘map‘ is ambiguous

此错误信息指示在您的 Arduino 代码中&#xff0c;map 函数的引用不明确。这是因为 map 同时存在于 Arduino API 和 C std 命名空间&#xff08;通过包含的 <map> 头文件&#xff09;中&#xff0c;导致编译器无法确定您打算使用哪个版本。 为了解决这个问题&#xff0c…

C# CAD2016获取数据操作BlockTableRecord、Polyline、DBObject

一、数据操作说明 //DBObject 基础类 DBObject dbObj (DBObject)tr.GetObject(outerId, OpenMode.ForRead); //Polyline 线段类 Polyline outerPolyline (Polyline)tr.GetObject(outerId, OpenMode.ForRead); //BlockTableRecord 块表类 BlockTableRecord modelSpace (Bloc…

学习Android的第四天

目录 Android FrameLayout ( 帧布局 ) FrameLayout size 大小 FrameLayout 属性 Android GridLayout ( 网格布局 ) GridLayout 属性 计算器布局 Android AbsoluteLayout 绝对布局 AbsoluteLayout 四大控制属性 Android FrameLayout ( 帧布局 ) FrameLayout 是 Android…

2024年-视觉AI检测的面试题目总结

Hello,各位&#xff0c;面试大宝典又来拉; 持续更新&#xff1b;一定要理清自己简历上的项目&#xff0c;因为简历是你给面试官的入口&#xff0c;会根据你的简历问问题&#xff1b;目前leetcode水平169题&#xff1b;持续更新&#xff1b; c八股文和python的八股文最好持续看&…