首页 > 数据库 >MySQL常用窗口函数总和

MySQL常用窗口函数总和

时间:2024-09-04 20:53:10浏览次数:15  
标签:salary 窗口 函数 示例 OVER MySQL ORDER 总和

在 MySQL 中,窗口函数是一类用于在查询结果集中计算值的函数,允许用户根据数据行进行聚合或排序操作,同时保留行的详细信息。窗口函数在分析数据时非常有用,因为它们允许您在不缩小结果集的情况下对数据进行复杂的计算。

常见的窗口函数包括:

  1. ROW_NUMBER()
  2. RANK()
  3. DENSE_RANK()
  4. NTILE(n)
  5. LAG()
  6. LEAD()
  7. FIRST_VALUE()
  8. LAST_VALUE()
  9. SUM(), AVG(), COUNT(), MIN(), MAX()(这些聚合函数在窗口函数上下文中也可以使用)

窗口函数的基本语法:

<窗口函数> OVER (
  [PARTITION BY <分组列>] 
  [ORDER BY <排序列>] 
  [ROWS or RANGE <窗口框架>]
)
  • PARTITION BY:用于将数据划分成不同的组(分区),窗口函数将在每个分区内进行计算。
  • ORDER BY:用于指定窗口函数计算的顺序。
  • ROWS or RANGE:定义了窗口框架,指定计算窗口的大小。

下面是进行演示的表数据

具体的窗口函数及示例:

1. ROW_NUMBER()

    • 用法:返回分区中每行的唯一行号。
    • 示例:
SELECT
    name,
    salary,
    ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM
    employee;

这将根据薪水的降序为每个员工分配一个唯一的行号。(可用于排名的场景,排序数重复时不重复排名)

2. RANK()

    • 用法:返回当前行在其分区中的排名,排名相同的行将具有相同的排名号,但排名之后的行的排名号会跳过。也就是不紧凑。
    • 示例:
SELECT 
    name, 
    salary, 
    RANK() OVER (ORDER BY salary DESC) AS rank
FROM 
    employee;

如果两名员工的薪水相同,他们将获得相同的排名,但下一个员工的排名将跳过一个数字。

3. DENSE_RANK()

    • 用法:类似于 RANK(),但没有跳过排名编号。
    • 示例:
SELECT 
    name, 
    salary, 
    DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM 
    employee;

这会给排名相同的行相同的编号,并且不会跳过接下来的排名。

4. NTILE(n)

    • 用法:将结果集划分为指定数量的桶,返回当前行属于哪个桶。NTILE(int n)
    • 示例:
SELECT 
    name, 
    salary, 
    NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM 
    employee;

这会将员工划分为四个组,并根据薪水的降序将每个员工分配到一个组。排名靠前的优先分大组。

5. LAG(n)

    • 用法:获取当前行的前n行的值。LAG(column,n);
    • 示例:
SELECT 
    name, 
    salary, 
    LAG(salary, 1) OVER (ORDER BY salary DESC) AS prev_salary
FROM 
    employee;

这会返回当前行的前一行的薪水。

6. LEAD(n)

    • 用法:获取当前行的后n行的值。
    • 示例:
SELECT 
    name, 
    salary, 
    LEAD(salary, 1) OVER (ORDER BY salary DESC) AS next_salary
FROM 
    employee;

这会返回当前行的后一行的薪水。

7. FIRST_VALUE()

    • 用法:返回窗口中第一个值。
    • 示例:
SELECT 
    name, 
    salary, 
    FIRST_VALUE(salary) OVER (ORDER BY salary DESC) AS first_salary
FROM 
    employee;

这会返回窗口中按薪水降序排列的第一个薪水值。

8. LAST_VALUE()

    • 用法:返回窗口中最后一个值。
    • 示例:
SELECT 
    name, 
    salary, 
    LAST_VALUE(salary) OVER (ORDER BY salary DESC) AS last_salary
FROM 
    employee;

这会返回窗口中按薪水降序排列的最后一个薪水值。

9. SUM(), AVG(), COUNT(), MIN(), MAX()(作为窗口函数)

    • 用法:可以在窗口函数上下文中使用这些聚合函数。
    • 示例:
SELECT 
    name, 
    salary, 
    SUM(salary) OVER (PARTITION BY department ORDER BY salary DESC) AS running_total
FROM 
    employee;

这将计算每个部门的薪水累积和。每个部门的员工按照salary降序排序。

总结:

窗口函数提供了强大的分析能力,允许在不改变结果集的情况下执行复杂的计算和聚合操作。通过适当使用窗口函数,可以轻松实现排名、运行总和、前后比较等常见的分析需求。

标签:salary,窗口,函数,示例,OVER,MySQL,ORDER,总和
From: https://blog.csdn.net/m0_65013257/article/details/141903714

相关文章

  • 力扣刷题--1837.K进制表示下的各位数字总和【简单】
    题目描述......
  • MySQL insert sql 返回自增id
    xml<insertid="addMain"useGeneratedKeys="true"keyColumn="id"keyProperty="id"parameterType="com.hopedove.coreserver.vo.vpm.ForeignTradeOutboundOrderVO">insertintoaps_foreign_trade_ex......
  • Linux宝塔Mysql两台服务器主从配置,服务器存在多个库
    实现目标:两台服务器(一台为从服务器,一台为主服务器),当主服务器的数据修改,从服务器复制主服务器的操作,实现自动修改数据;1、主数据库操作-先登录主数据库#登录数据库,用root登录方便,用其他账号会提示权限不足,需要登录root给予权限mysql-uroot-p密码2、创建一个账号,供从库用......
  • 构建专业技能:MySQL数据备份策略的培训与实践
    数据备份是数据库管理中的一项基础且关键的任务,它直接关系到数据安全和业务连续性。在MySQL环境中,有效的数据备份策略培训对于确保团队成员能够正确执行备份操作、理解备份原理以及在必要时进行数据恢复至关重要。本文将详细介绍如何在MySQL中实现数据备份的策略培训,包括培......
  • 优化MySQL数据备份的网络策略:技术与实践
    在当今的数据库管理实践中,数据备份是确保数据安全性和业务连续性的关键环节。MySQL作为广泛使用的数据库系统,其数据备份过程往往涉及大量的数据传输,尤其是在分布式或云环境中。因此,网络优化在MySQL数据备份中扮演着至关重要的角色。本文将探讨如何在MySQL中实现数据备份的网......
  • MySQL(二)函数
    聚合函数1、AVG()函数返回数值列的平均值SELECTAVG(column_name)FROMtable_name2、COUNT()函数返回匹配指定条件的行数(1)返回指定列的值的数目(NULL不计入)SELECTCOUNT(column_name)FROMtable_name;(2)返回表中的记录数SELECTCOUNT(*)FROMtable_name;(3)返回指......
  • MySQL 2003 - Can’t connect to MySQL server on ' '(10060)
    2003-Can’tconnecttoMySQLserveron''(10060) 一般是以下几个原因造成的:1.网络不通畅2.mysql服务未启动3.防火墙未开放端口4##云服务器的安全组规则未设置  一般是以下几个原因造成的:1.网络不通畅:【mysql-u-p,看看能不能登陆】2.mysql服务未启动:【mysql-u-p,......
  • MYSQL-Linux安装
    MySQL8.0.26-Linux版安装1.准备一台Linux服务器云服务器或者虚拟机都可以;Linux的版本为Centos7;2.下载Linux版MySQL安装包https://downloads.mysql.com/archives/community3.创建目录、解压mkdirmysq1//创建目录tar-xvfmysql安装包.x8664.rpm-bundle.tar-Cmysql/......
  • React18+TS+NestJS+GraphQL+AntD+TypeOrm+Mysql全栈开发在线教育平台
    ‌标题‌:‌构建在线教育平台:‌React18+TypeScript+NestJS+GraphQL+AntDesign+TypeORM+MySQL全栈技术栈解析‌引言‌:‌在当今数字化时代,‌在线教育平台的需求日益增长。‌为了构建一个高效、‌可扩展且用户友好的在线教育平台,‌选择合适的技术栈至关重要。‌本文......
  • STM32的窗口看门狗详解及案例(基于HAL库)
    目录一、引言二、窗口看门狗的工作原理1.基本概念2.功能描述3.窗口值和计数器初始值三、STM32F429HAL库中窗口看门狗的配置步骤1.开启时钟2.初始化窗口看门狗 3.开启早期唤醒中断4.喂狗操作 四、窗口看门狗的应用场景 1.防止软件死锁2.检测外部干扰3.提高......