首页 > 数据库 >MySQL入门学习-SQL高级技巧.Window Function

MySQL入门学习-SQL高级技巧.Window Function

时间:2024-07-21 19:55:56浏览次数:17  
标签:Function 窗口 函数 示例 RANK Window MySQL 排名 id

       在 MySQL 中,窗口函数(Window Function)是一种强大的分析工具,它可以在查询结果的基础上进行更复杂的计算和分析。

一、窗口函数的概念:

       窗口函数可以对查询结果的每一行数据,根据指定的分区(Partition)和排序规则(Order)进行计算。它可以在同一查询中同时返回基础行数据以及基于这些行的计算结果。

二、窗口函数的特点和使用方法:

1. 增强数据分析能力:

       窗口函数可以方便地进行排名、累计计算、移动平均等操作,为数据分析提供了更多的可能性。

2. 语法结构:

       窗口函数的一般语法为 '函数名(表达式) OVER (PARTITION BY 分区列 ORDER BY 排序列 [窗口子句])' 。

3. 常见的窗口函数:

    - 'ROW_NUMBER()' :

       为结果集中的每一行分配一个唯一的行号,行号从 1 开始递增。

    - 'RANK()' :

       为相同值的行分配相同的排名,但排名可能不连续。例如,如果有两个行具有相同的值,它们将获得相同的排名,下一个排名将跳过中间的数字。

    - 'DENSE_RANK()' :

       为相同值的行分配相同的排名,排名是连续的,不会跳过中间的数字。

    - 'SUM()' 、 'AVG()' 、 'MIN()' 、 'MAX()':

       这些聚合函数在窗口函数中可以按照指定的分区和排序规则进行计算,得到每行对应的累计值、平均值、最小值、最大值等。

三、下面是一些使用窗口函数的示例代码及说明:

示例 1:使用 'ROW_NUMBER()' 函数进行行号分配

SELECT 
    id, 
    name, 
    ROW_NUMBER() OVER (ORDER BY id) AS row_num
FROM 
    students;

在上述示例中,使用 'ROW_NUMBER()' 函数按照 'id' 列进行升序排序,并为每一行分配一个行号 'row_num' 。

示例 2:使用 'RANK()' 函数进行排名

SELECT 
    id, 
    score, 
    RANK() OVER (ORDER BY score DESC) AS rank
FROM 
    exams;

在这个示例中,使用 'RANK()' 函数按照 'score' 列进行降序排序,并为每一行分配一个排名 'rank' 。如果有多个学生的分数相同,他们将获得相同的排名,下一个排名将跳过中间的数字。

示例 3:使用 'DENSE_RANK()' 函数进行连续排名

SELECT 
    id, 
    score, 
    DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM 
    exams;

与 'RANK()' 函数不同, 'DENSE_RANK()' 函数为相同分数的行分配连续的排名,不会跳过中间的数字。

示例 4:使用聚合函数作为窗口函数进行累计计算

SELECT 
    id, 
    month, 
    sales,
    SUM(sales) OVER (ORDER BY month) AS cumulative_sales
FROM 
    sales_data;

在这个示例中,使用 'SUM()' 函数作为窗口函数,按照 'month' 列进行升序排序,计算每行对应的累计销售额 'cumulative_sales' 。

四、窗口函数与其他技术的比较:

1. 与普通聚合函数的比较:

       普通聚合函数(如 'SUM()' 、 'AVG()' 等)会将整个结果集作为一个整体进行计算,只返回一个值。而窗口函数可以在每一行的基础上进行计算,返回与行数相同的结果集。

2. 与子查询的比较:

       在某些情况下,窗口函数可以替代复杂的子查询来实现相同的功能,使查询更加简洁和易于理解。

五、窗口函数的高级应用:

1. 数据分析和报告:

       窗口函数可以用于生成各种排名、累计值、移动平均值等,帮助分析数据的趋势和分布。

2. 解决复杂的业务问题:

       例如,在销售数据中,可以使用窗口函数计算每个销售人员在每个月的销售额排名,或者计算每个产品在不同时间段的累计销售情况。

       总之,窗口函数是 MySQL 中非常强大的工具,掌握窗口函数的使用可以大大提高数据分析和查询的能力。
(文章为作者在学习MySQL过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

标签:Function,窗口,函数,示例,RANK,Window,MySQL,排名,id
From: https://blog.csdn.net/weixin_69763181/article/details/140514855

相关文章

  • MySQL执行状态查看与分析
     当mysql出现性能问题时,一般会查看mysql的执行状态,执行命令:showprocesslist各列的含义列名含义id一个标识,你要kill一个语句的时候使用,例如 mysql>kill207user显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql语句host显示这个语句是从哪个ip的哪个端口上......
  • Windows BITS(Background Intelligent Transfer Service)是微软开发的一种后台服务,旨在
    后台智能传送服务-Win32apps|MicrosoftLearn关于BITS-Win32apps|MicrosoftLearnWindowsBITS(BackgroundIntelligentTransferService)起源于微软在WindowsXP和WindowsServer2003时期的需求,特别是在联网环境条件不佳或断断续续的情况下,需要一种能够有效管理和优......
  • 掌控数据库:在 PHPStudy 中玩转 MySQL 命令行的终极指南
    文章目录引言1.PHPStudy简介理解数据库,表,字段的模型2.打开MySQL命令行2.1启动PHPStudy2.2启动MySQL服务2.3打开命令行2.4登录MySQL3.MySQL基本命令3.1查看(进去)数据库3.2创建数据库3.3使用数据库3.4创建数据表3.5插入数据3.6查询数据(查表)3.7更新数据3.8......
  • 关于mysql架构的思考
    MySQLMySQL的逻辑架构主要可以分成哪几个部分?每部分的主要职责是什么?MySQL的逻辑架构主要可以分成三个主要部分:连接层、服务层和引擎层。每个部分都有其特定的职责和功能,以确保MySQL数据库系统的高效运行。1.连接层主要职责:负责与客户端建立连接和通信。当客户端发起......
  • 无法更新 Python MySQL 中的tinyint
    我无法使用以下代码更新我的Tinyint值(valid_state):importmysql.connectormydb=mysql.connector.connect(host="localhost",user="mahdi",passwd="Abcd@1324",database="mycustomers")mycursor=mydb.cursor()sql="UPDATE`......
  • Adobe InCopy 2024 v19.5 (macOS, Windows) - 编写和副本编辑软件
    AdobeInCopy2024v19.5(macOS,Windows)-编写和副本编辑软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、AdobeXD......
  • Adobe InDesign 2024 v19.5 (macOS, Windows) - 版面设计和桌面出版软件
    AdobeInDesign2024v19.5(macOS,Windows)-版面设计和桌面出版软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、Adob......
  • Tenable Nessus 10.7.5 (macOS, Linux, Windows) 发布 - #1 漏洞评估解决方案
    TenableNessus10.7.5(macOS,Linux,Windows)发布-#1漏洞评估解决方案发布Nessus试用版自动化安装程序,支持macOSSonoma、RHEL9和Ubuntu24.04请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgNessus......
  • Ubuntu环境与Windows环境共享文件服务搭建(Samba服务)
    问题在windows系统和ubuntu系统之间需要共享大体积的数据(上百GB),通过U盘或者移动硬盘拷贝耗时长,且需要至少拷贝两次,这还要这些移动存储设备的容量够大,在这种情况下,如果能够使两台设备之间直接通过网线(别的联通方式可能更麻烦,在大多数情况下设备上都有以太网口)直接进行数据的......
  • Windows 10 专业版 安装nvidia 显卡 nvidia安装程序无法继续,此NVIDIA驱动程序与此Win
    1win10系统全新安装,安装nvidai显卡驱动报错:nvidia安装程序无法继续,此NVIDIA驱动程序与此Windows版本不兼容2查看win10系统版本:运行--输入winver3升级补丁更新系统#补丁更新完成,重新启动win10,再次打开windows更新,升级到22h2#再次查看系统版本,已更新成功4......