一、概述

row_number是数据库中常用的一个开窗函数,可以实现数据分区编号的功能,然而MySQL并不支持开窗函数。本文介绍了在MySQL中实现开窗函数的方法。

二、经典开窗函数

首先准备基础数据,如下入所示。

在hive或oracle中使用经典开窗函数实现数据分组编号的方法如下。

select name,

age,

row_number() over (partition by age order by name) as rank

from student

但是,MySQL中并不支持上述开窗函数。

三、MySQL实现开窗函数的方法

select @row_number:=

case when @previous_age = a.age then @row_number + 1

else 1

end as num,

`name`,

age,

@previous_age:=a.age

from

a, (select @previous_age:=0, @row_number:=0) as b

order by age,`name`

其中表a为上述的学生年龄表。

MySQL允许用户自定义变量,[email protected]_name,赋值方式为“:=”,并支持基本数学计算,例如,@row_number:=0表示定义变量row_number并赋值为0,@row_number + 1 表示row_number的值加1。

下面分析分组编号的执行过程。a表按照age和name排序,@[email protected]_age的初始值为0,执行过程,逐一和当前记录的age比较,[email protected]_age=a.age,说明当前记录和前面的记录是同一个年龄,那么将row_number加1;[email protected]_age != a.age,说明当前记录是一个新的年龄,那么将row_number赋值为1。所有数据扫描完成后,也就完成了分组编号。

mysql 排序开窗函数_MySQL中实现开窗函数相关推荐

  1. mysql空值判断函数_MySQL中的ifnull()函数判断空值

    我们知道,在不同的数据库引擎中,内置函数的实现.命名都是存在差异的,如果经常切换使用这几个数据库引擎的话,很容易会将这些函数弄混淆. 比如说判断空值的函数,在Oracle中是NVL()函数.NVL2( ...

  2. mysql中常用的sql函数_Mysql中的常用函数:

    Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...

  3. mysqlsql常用函数_MySQL中的常用函数

    在MySQL中,函数不仅可以出现在select语句及其子句中,而且还可以出现在update.delete语句中. 常用的函数有: 1. 字符串函数:主要用于处理字符串. 2. 数值函数:主要用于处理数 ...

  4. mysql排序规则错误_MySQL中“非法混合排序规则”错误的疑难解答

    阿波罗的战车 更改字符串的一个(或两者)的排序规则以使它们匹配,或者添加一个COLLATE从句到你的表情.这"校对"到底是什么?如下文所述字符集和排序规则:A 字符集是一组符号和编 ...

  5. mysql 修改这段长度_MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!...

    最近在工作中遇到一个问题: 我们系统的一些逻辑处理是用存储过程实现的,但是有一天客服反馈说订单下单失败,查了下单牵扯到的产品基础资源,没有问题. 下单的存储过程中有这样两句代码: 1 declare ...

  6. mysql输出max函数_MySQL中的max()函数使用教程

    MySQL的max()函数是用来找出一个记录集中的最大值记录. 要了解MAX功能考虑的EMPLOYEE_TBL表具有以下记录: mysql> SELECT * FROM employee_tbl ...

  7. mysql sleep详解_MySQL中的sleep函数介绍

    MySQL数据库中有一个不太常用但便于进行某些调试的函数:sleep(),今天我们就来介绍一下这个函数的用法. 首先,看看官网对于函数的定义: SLEEP(duration) Sleeps (paus ...

  8. mysql中的split函数_mysql中的split函数

    mysql中没有字符串的分割函数,而最近在工作中,想用到这个功能,所以就在网上找了下,终于在csdn发现一个好方法.原帖的地址: 这里摘抄两个函数: DELIMITER $$ CREATE DEFIN ...

  9. mysql常用转换函数_MySQL中常用转换函数介绍

    Cast函数:CONVERT函数. 用法:CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name). ...

最新文章

  1. GPT3后可考虑的方向-知识推理与决策任务及多模态的信息处理
  2. java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...
  3. ubuntu oracle 10g 安装,Ubuntu 12.04 安装Oracle 10g 全过程(完美)及问题解决办法
  4. JAVA微信开发:[17]如何获取所有关注用户
  5. 前端框架开始学习Vue(一)
  6. zabbix 2.2节点批量安装
  7. Apache设置用户权限(2个域名。一个能访问全部文件,一个只能访问指定文件)...
  8. GPGGA \ GPRMC 格式解析
  9. 教你怎么学习arcgis软件①
  10. H265分辨率解码概述
  11. Hit Refresh读书摘要
  12. mysql启动服务报Found option without preceding group in config file
  13. ubuntu mysql mysqldb_告诉你在Ubuntu上安装MySQLdb的方法及命令
  14. 日有所思(5)——校正装置的理解和设计
  15. Excel 多列条件查找
  16. Halting Problem的讨论
  17. 泛型及其使用、Stream的方法(Java小白进阶day17)
  18. 浅入浅出Javac编译原理——爪哇岛探险(1)
  19. Prometheus时序数据库-报警的计算 及 Prometheus时序数据库-数据的查询
  20. 计算机图形学:详解法线与法线贴图原理

热门文章

  1. web前端学习笔记——JQuery
  2. 腾达fh450虚拟服务器,腾达(Tenda)FH450与FH451与F450与F451无线路由器设置上网
  3. MFC子线程中调用updatedata()函数报错解决方法
  4. java 插件11.45.2.14_IntelliJ IDEA 2020.2.4款 神级超级牛逼插件推荐
  5. Lombok Builder模式创建对象
  6. office E5自动订阅程序
  7. Java::拼图小游戏::
  8. jmeter断言操作——响应断言
  9. jmeter断言(响应断言)
  10. App识别微信小程序二维码、太阳码调研