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;
相关推荐
问心无愧051341 分钟前
ctf show web入门111
android·前端·笔记
海南java第二人2 小时前
Nebula Graph 实战:基于图数据库存储 CMDB 实体关系
数据库·图数据库·nebula
曹牧2 小时前
oracle:“not all variables bound”
数据库·oracle
数据库百宝箱2 小时前
Oracle RMAN Image Copy 本地恢复
数据库·oracle
zuYM4g7Dp3 小时前
NoSql数据库设计心得
数据库·nosql
bjzhang754 小时前
CentOS下安装MySQL详解
linux·mysql·centos
睡不醒男孩0308235 小时前
第七篇:揭秘 PostgreSQL 数据库内核级管控:CLup 深度架构设计与高可用底座技术白皮书
数据库·postgresql·clup
cmes_love6 小时前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
swordbob6 小时前
MySQL字符集陷阱:从Oracle迁移踩坑到utf8mb4强制规范
数据库·sql
牛油果子哥q6 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++