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

mysql-窗口函数一

目录

一、感受一下分组与窗口函数的区别

二、分组函数的使用 

2.1 分组函数下order by使用


窗口函数需要mysql的版本大于等于8才行,可以先检查一下自己的mysql版本是多少

select version();

准备一下表数据

drop table if exists student;
create table student
(cid    varchar(50),sname  varchar(50),course varchar(50),score  int
) character set utf8mb4;-- 插入两个班级的学生数据(每个学生包含4门课程成绩)
INSERT INTO student (cid, sname, course, score)
VALUES
-- 班级01
('01', '张三', '语文', 85),
('01', '张三', '数学', 92),
('01', '张三', '英语', 78),
('01', '张三', '物理', 88), 
('01', '李四', '语文', 76),
('01', '李四', '数学', 88),
('01', '李四', '英语', 95),
('01', '李四', '化学', 90), 
('01', '王五', '语文', 65),
('01', '王五', '数学', 73),
('01', '王五', '英语', 82),
('01', '王五', '生物', 77), -- 班级02
('02', '赵六', '语文', 90),
('02', '赵六', '数学', 67),
('02', '赵六', '英语', 88),
('02', '赵六', '地理', 85), 
('02', '陈七', '语文', 72),
('02', '陈七', '数学', 85),
('02', '陈七', '英语', 91),
('02', '陈七', '历史', 89), 
('02', '周八', '语文', 68),
('02', '周八', '数学', 79),
('02', '周八', '英语', 84),
('02', '周八', '政治', 83); 

一、感受一下分组与窗口函数的区别

假设现在有一个需求需要统计每个学生的各科总成绩,我们分别使用分组group by 和窗口函数 partion by 来试一下

先来看看group by

select cid, sname, sum(score)
from student
group by sname;

 这里是以每个学生的名字来分组的,显然这里只有六个学生,那么就只会有六行数据

接下来我们看看 partion by的使用

select *,sum(score) over (partition by sname)
from student;

从行来看:可以很明显的感受到,分组group by是先分组在把数据进行压缩,但是窗口函数是保留了并没有对行数进行压缩

从列来看:也是发现一个mysql5.7和mysql8的区别,因为我本机是5.7,在云服务器上面用了mysql8,今天惊奇的发现mysql8,不是分组列,不能被展示,意思就是我只能展示两列,一列是sname(分组列),聚合函数一列

也就是说group by生成的表与原有的表行数和列数都不相同

 

二、分组函数的使用 

2.1 分组函数下order by使用

先说结论,排序只会在当前窗口内进行排序

假设现在有一个需求,需要查询每个同学的各科成绩为降序排列

select sname, course, score, 
row_number() over (partition by sname order by score desc)
from student;

相关文章:

  • 缓存:缓解读库压力的高效方案与应用实践
  • Transformer架构的解耦重组现象
  • JVM——Java 虚拟机是如何加载 Java 类的?
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(下)
  • 记录搭建自己的应用中心-需求看板搭建
  • 如何解决 H5 远程收款的问题呢?
  • 计算机网络——HTTP/IP 协议通俗入门详解
  • 人工智能——DBSCAN 聚类算法
  • 前端面经-webpack篇--定义、配置、构建流程、 Loader、Tree Shaking、懒加载与预加载、代码分割、 Plugin 机制
  • Java学习手册:Spring 事务管理
  • Unity SpriteRenderer(精灵渲染器)
  • 【专题五】位运算(2)
  • 【5G 架构】边缘计算平台是如何与3GPP网络连接的?
  • 【云原生】基于Centos7 搭建Redis 6.2 操作实战详解
  • C++负载均衡远程调用学习之消息路分发机制
  • 近端策略优化PPO详解:python从零实现
  • 哈希表笔记(二)redis
  • 定义一个3D cube,并计算cube每个顶点的像素坐标
  • 怎么查看数据库容量
  • PDF本地化开源项目推荐
  • 净海护渔,中国海警局直属第一局开展伏季休渔普法宣传活动
  • 今年五一假期出游人群规模预计比去年提升8%,哪里最热门?
  • 上海科创再出发:“造星”的城和“摘星”的人
  • 北方旱情持续,水利部:大中型灌区春灌总体有保障
  • 交行一季度净利253.72亿元增1.54%,不良率微降
  • 解读|特朗普“助攻”下加拿大自由党“惨胜”,卡尼仍需克服“特鲁多阴影”