首页 > 数据库 >MySQL窗口函数汇总

MySQL窗口函数汇总

时间:2024-09-27 10:47:27浏览次数:1  
标签:窗口 函数 汇总 rank 分组 DepartmentID MySQL 聚合

1.窗口函数概述
窗口函数是一种SQL函数,非常适合于数据分析,其最大的特点就是:输入值是从SELECT语句的结果集中的一行或者多行的"窗口"中获取的,也可以理解为窗口有大有小(行数有多有少)。
通过OVER子句,窗口函数与其他的SQL函数有所区别,如果函数具有OVER子句,则它是窗口函数。如果它缺少了OVER子句,则他就是个普通的聚合函数。
窗口函数可以简单地解释为类似于聚合函数的计算函数,但是通过GROUP BY子句组合的常规聚合会隐去正在聚合的各个行,最终输出称为一行。但是窗口函数聚合完之后还可以访问当前行的其他数据,并且可以将这些行的某些属性添加到结果当中去。
下面可以通过两个图来区分普通的聚合函数和窗口函数

首先让我们先添加测试数据,并查看表。

CREATE DATABASE IF NOT EXISTS EmployeeDB;
USE EmployeeDB;
CREATE TABLE Employees (
    EmployeeID INT AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(100),
    DepartmentID INT,
    Salary DECIMAL(10, 2)
);
 
INSERT INTO Employees (Name, DepartmentID, Salary) VALUES
('Alice', 1, 50000),
('Bob', 1, 55000),
('Charlie', 2, 60000),
('David', 1, 50000),
('Eve', 2, 65000),
('Frank', 3, 45000),
('Grace', 3, 47000),
('Hannah', 3, 48000),
('Ian', 2, 70000),
('Jack', 1, 52000);

select DepartmentID, sum(salary) as total
from employees
group by DepartmentID;

我们可以看的出来,常规聚合函数把id进行分组然后把每组的薪资综合计算出来放在最后面。

我们可以通过这两个例子看出来,聚合函数和窗口聚合函数的区别。就是窗口函数会进行分组,但不会把行进行合并。对于每一组窗口函数返回出来的结果都会重复的放在最后面。

2.窗口函数的语法
Function(arg1,..., argn) OVER ([PARTITION BY <...>] [ORDER BY <....>] [<window_expression>])
对于以上的窗口函数的语法[ ]中的语法是可以根据自己的需求进行选择(非必须写入语法),并且此语法严格按照上面的顺序来规定。
Function(arg1,..., argn)是表示函数的分类,可以是下面分类中的任何一组。
----------聚合函数,例如sum,min,avg,count等函数(常用)
----------排序函数,例如rank row_number dense_rank()等函数(常用)
----------跨行函数,lag lead 函数
OVER [PARTITION BY <...>] 类似于group by 用于指定分组
--每个分组你可以把它叫做窗口
--不分组的情况可以写成partition by null 或者直接不写partition by,所有列为一个大组
--分组的情况下,partition by 后面可以跟多个列,例如partition by cid,cname
[ORDER BY <....>] 用于指定每个分组内的数据排序规则 支持ASC、DESC
[<window_expression>] 用于指定每个窗口中 操作的数据范围 默认是窗口中所有行
1.窗口函数语法解释-Function(arg1,..., argn)
通常和partition by分组使用。当然也可以不分组使用,但也不分组使用通常没有意义。
----------聚合函数,例如sum,min,avg,count等函数(常用)
----------排序函数,例如rank row_number dense_rank()等函数(常用)
----------跨行函数,lag lead 函数
1.聚合函数
我们还通过上文的测试数据进行演示。我们就演示2个函数,其他的聚合类函数都是相同的用法。
sum函数:求和

select *,
       sum(Salary) over (partition by DepartmentID) total
from employees

min函数 :最小值

select *,
       min(Salary) over (partition by DepartmentID) total
from employees;

其他的聚合函数都是同样的用法。

2.排序函数
rank row_number dense_rank()等函数,通常与order by函数一起使用。
row_number()函数:对分组之后按照某些规则从高到低或者从低到高进行排序(order by),然后打上序号,不考虑并列的情况。

rank()函数:对分组之后按照某些规则从高到低或者从低到高进行排序(order by),然后打上序号,考虑并列情况并且跳跃排名,对此我们需要增添一组数据。

 

INSERT INTO Employees (Name, DepartmentID, Salary) VALUES('css',1,45000);

 

标签:窗口,函数,汇总,rank,分组,DepartmentID,MySQL,聚合
From: https://www.cnblogs.com/jelly12345/p/18435225

相关文章

  • MySQL零基础入门教程-8.1 表的连接\增删数据、表结构的增删改、字段约束(非空、唯一
    教程来源:B站视频BV1Vy4y1z7EX001-数据库概述_哔哩哔哩_bilibili我听课收集整理的课程的完整笔记,供大家学习交流下载:夸克网盘分享本文内容为完整笔记的第八篇的第一部分1、表怎么进行连接的P77-P1431、表怎么进行连接的从emp表中取ename,从dept表中取dname,没有条件限制最终查询结果是......
  • PbootCms内页打不开的常见情况汇总
    在使用PBootCMS建站时,如果遇到内页无法正常访问的问题,通常与伪静态配置有关。以下是一些常见问题及解决方法,包括关闭伪静态和重新配置伪静态的方法。常见问题点击任何链接都跳转到首页内页访问报错解决方案方案一:关闭伪静态进入后台管理界面登录PBootCMS后台管理系统......
  • nacos配置持久化到mysql数据库
    以版本2.4.1为例,要实现Nacos2.4.1的配置持久化,你需要按照以下步骤操作:准备数据库:首先,确保你已经安装并配置好了MySQL数据库,并且版本符合Nacos的要求(MySQL5.6及以上)。创建数据库:在MySQL中创建一个新的数据库,例如命名为nacos。执行SQL脚本:从Nacos的conf......
  • hibernate 自定义表名与列名 - 增删改查分页 - 兼容Mysql和Oracle
    1.新增service,先组装SQLimportlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.data.domain.Page;importorg.springframework.stereo......
  • MySQL 在创建和删除用户时出现的ERROR 1396 (HY000)错误
    MySQL作为一个开源且广泛使用的关系型数据库管理系统,经常被用于处理各种的数据操作。在MySQL中,用户管理是非常重要的一个方面。尽管创建和删除用户在MySQL中是非常容易的,但是有时候会遇到ERROR1396(HY000)的错误。这个错误通常会在以下情况下发生:创建用户出现ERROR1396(HY000......
  • MySQL修改密码
    MySQL提供了各种可用于更改用户密码的语句,包括UPDATE,SETPASSWORD和GRANTUSAGE语句。方法1:使用UPDATE语句更改MySQL用户密码更改密码的第一种方法是使用UPDATE语句来更新mysql数据库的user表。执行UPDATE语句后,还需要执行FLUSHPRIVILEGES语句,从mysql数据库中的授权表中重新加......
  • PyQt项目实战-(Pyqt5+mysql制作一个TODO清单 第一部分)
    PyQt项目实战Pyqt5实现todolist工作待办的增、改、删、查功能,连接mysql存储数据(待办事项)。目录目录        1.界面设计    2.功能实现    3.界面各Button点击事件和槽函数的链接    4.mysql数据库操作工具类    5.槽函数实现......
  • 易优CMS请重启MYSQL数据库,或者联系空间服务商处理[错误报错·····]出现以下提示该
    当你遇到“请重启MYSQL数据库,或者联系空间服务商处理”的错误提示时,通常意味着数据库连接存在问题,可能是由于数据库服务未启动,或者是数据库配置信息不正确导致的。以下是一些基本的解决步骤:步骤1:检查数据库服务状态确认数据库服务是否启动如果你有访问服务器的权限,可以通......
  • MySQL 应对大量并发连接之道
    在当今的互联网时代,数据库面临着越来越多的并发连接请求。对于MySQL来说,如何有效地处理大量的并发连接成为了一个关键问题。本文将探讨MySQL处理大量并发连接的方法和策略。一、并发连接带来的挑战当MySQL数据库面临大量并发连接时,可能会出现以下问题:性能下降:大量的连接......
  • MySQL 中优化 COUNT()查询的实用指南
    在MySQL数据库的使用中,我们经常会用到COUNT()函数来统计行数或满足特定条件的行数。然而,在处理大规模数据时,COUNT()查询可能会变得非常缓慢,影响数据库的性能。那么,如何在MySQL中优化COUNT()查询呢?本文将为你介绍一些实用的方法。一、COUNT()函数的基本用法COUNT()函数是My......