mysql-窗口函数一

目录

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

二、分组函数的使用

[2.1 分组函数下order by使用](#2.1 分组函数下order by使用)


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

sql 复制代码
select version();

准备一下表数据

sql 复制代码
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

sql 复制代码
select cid, sname, sum(score)
from student
group by sname;

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

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

sql 复制代码
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使用

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

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

sql 复制代码
select sname, course, score, 
row_number() over (partition by sname order by score desc)
from student;
相关推荐
DashVector29 分钟前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX1 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂1 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
Digitally2 小时前
如何用5种实用方法将电脑上的音乐传输到安卓手机
android·智能手机·电脑
努力成为一个程序猿.2 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
毕设十刻2 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
HahaGiver6662 小时前
Unity与Android原生交互开发入门篇 - 打开Unity游戏的设置
android·unity·交互
2501_915909063 小时前
WebView 调试工具全解析,解决“看不见的移动端问题”
android·ios·小程序·https·uni-app·iphone·webview
liliangcsdn3 小时前
如何利用约束提示优化LLM在问题转sql的一致性
数据库·sql
熙客3 小时前
Kubernetes是如何保证有状态应用数据安全和快速恢复的
mysql·云原生·容器·kubernetes