当前位置: 首页 > article >正文

MySQL ——group by子句使用with rollup

     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 小结


http://www.kler.cn/a/232931.html

相关文章:

  • Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件
  • 【算法一周目】双指针(2)
  • [ 网络安全介绍 5 ] 为什么要学习网络安全?
  • 【Pikachu】目录遍历实战
  • 车载空气净化器语音芯片方案
  • CommandLineParser 使用
  • npm 下载报错
  • 利用LLM大模型生成sql的深入应用探究
  • nvm安装node后,npm无效
  • “Hopf Oscillator-Based Gait Transition for A Quadruped Robot“代码复现
  • 春节:当代发展及创新传承
  • 揭开Markdown的秘籍:标题|文字样式|列表
  • c#cad 创建-圆(二)
  • 飞天使-k8s知识点13-kubernetes散装知识点2-statefulsetdaemonset
  • Red Panda Dev C++ Maker 使用说明
  • 攻防世界 CTF Web方向 引导模式-难度1 —— 1-10题 wp精讲
  • Git远程仓库的使用(Gitee)及相关指令
  • 【初中生讲机器学习】6. 分类算法中常用的模型评价指标有哪些?here!
  • 《游戏引擎架构》 -- 学习2
  • curl8.6.0 - CURLE_PEER_FAILED_VERIFICATION
  • Linux——进程间通信:管道
  • VUE学习——事件修饰符
  • npm淘宝镜像源换新地址
  • 如何使用Python + 百度翻译API 自动大批量免费翻译Excel文件中的外语内容
  • Modelsim10.4安装
  • 1123. 铲雪车(欧拉回路)