MySQL–ROW_NUMBER

一、窗口函数

​ 要讲row_number,首先得讲一下窗口函数。窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。

​ 窗口函数的基本语法如下:

<窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>)

<窗口函数>的位置,可以放以下两种函数:

1) 专用窗口函数,包括后面要讲到的rank, dense_rank, row_number等专用窗口函数。

2) 聚合函数,如sum. avg, count, max, min等

partition by用来对表分组order by子句的功能是对分组后的结果进行排序

因为窗口函数是对where或者group by子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中

二、row_number

​ 在MySQL8.0版本中已支持row_number函数,接下来讲的内容基于MySQL5.7版本。

​ 在8.0版本前无row_number函数,那么我们可以自己建一个类似row_number的功能。

​ 以上为表TEMP_TEST的数据。

要模拟row_number()函数,必须使用会话变量。

1、每行添加序号

SET @row_number = 0;
SELECT( @row_number := @row_number + 1 ) AS ROW_NUMBER,ID,NAME,AGE,ADDRESS
from TEMP_TEST
ORDER by AGE;
-- 新写法
SELECT( @row_number := @row_number + 1 ) AS ROW_NUMBER,ID,NAME,AGE,ADDRESS
from TEMP_TEST a,(select @row_number := 0) b
ORDER by AGE;

2、每组添加序号

-- row_number()
SELECTROW_NUMBER() OVER(PARTITION BY AGE ORDER BY ID),ID,NAME,AGE,ADDRESS
FROMTEMP_TEST; -- 自定义
SELECT@row_number :=-- 若AGE相等则自增,若partition有多个字段则可以使用多个变量进行判断,如:@AGE = AGE and @ADDRESS = ADDRESSIF( @AGE = AGE, @row_number + 1, 1 ) AS ROW_NUMBER, @AGE := AGE AS AGE, -- 赋值partition字段ID,NAME,AGE,ADDRESS
FROMTEMP_TEST
ORDER BYAGE,ID DESC; -- 其它示例
select ROW_NUMBER() OVER(PARTITION BY pid,checked ORDER BY id) t , a.* from t_test_area a;
select @row_number := if(@pid = pid and @checked = checked, @row_number + 1, 1 ) row_number,@pid := pid, @checked := checked, t.*
from t_test_area t
order by pid,checked,id;

三、视图中使用row_number()

 可参考:https://blog.csdn.net/weixin_45873444/article/details/119895410

​ 我在做Oracle向MySQL的数据库迁移中遇到了视图中使用row_number()函数的情况,一起看一下怎么在MySQL中用上面的方法实现视图中的row_number()函数。

如果直接使用上面的方法会直接报错,这是因为MySQL在视图中不支持使用会话变量,所以我们只能创建一个函数来替代使用。

-- 一般写法
create function row_number()
returns INTEGER
return @row_number := @row_number + 1;
-- 带复位的写法
CREATE FUNCTION func_row_num(reset bit) RETURNS int(11)
beginif reset thenset @row_num := 0;elseset @row_num := ifnull(@row_num, 0) + 1;end if;return  @row_num;
end

在视图中使用自建的函数即可实现视图中使用row_number()函数。

MySQL–ROW_NUMBER相关推荐

  1. MySQL ROW_NUMBER 函数

    MySQL ROW_NUMBER()函数 为结果集中的每一行生成序列号 MySQL ROW_NUMBER()从8.0版开始引入了功能.这ROW_NUMBER()是一个窗口函数或分析函数,它为从1开始应 ...

  2. mysql row_number吗_MySQL中的ROW_NUMBER()是什么?

    MySQL版本8.0中包含的Row_NUMBER().这是一种窗口函数.这可用于为行分配序列号.要了解,请借助CREATE pcommand创建一个表- 建立表格CREATE table rowNum ...

  3. mysql排序两位数_MySQL_Mysql row number()排序函数的用法和注意,虽然使用不多,但是也有情况 - phpStudy...

    Mysql row number()排序函数的用法和注意 虽然使用不多,但是也有情况是需要在mysql 里面写语句开发功能的.在sql server 使用惯了,习惯了使用row_number() 函数 ...

  4. mysql排名函数使用

    1.percent_rank()函数 PERCENT_RANK()函数计算分区或结果集中行的百分位数排名这PERCENT_RANK()是一个窗口函数, 用于计算分区或结果集中行的百分位数. 以下显示了 ...

  5. Mysql常用函数之Rank 排名函数

    mysql中的排名函数 主要介绍一下mysql里面的排名函数,涉及到的函数有以下几个: rank().dense_rank().row_number() 1.准备工作 建立一个rank表: creat ...

  6. sql EXPLAIN 详解 type\rows

    Explain MySql提供了Explain命令,它可以对你的sql语句进行分析,返回你的sql执行的详细信息,以供开发人员针对性进行优化. 我们可以查看该sql是否使用索引.是否做全表扫描.性能瓶 ...

  7. mysql col与row_使用mysql实现row_number() over(partition by col1 order by col2)函数

    [color=red]row_number() OVER (PARTITION BY COL1 ORDER BY COL2)[/color] 表示根据COL1分组,在分组内部根据 COL2排序,而此函 ...

  8. 【原创】MySQL 实现Oracle或者PostgreSQL的row_number over 这样的排名语法

    PostgreSQL 和Oracle 都提供了 row_number() over() 这样的语句来进行对应的字段排名, 很是方便.  MySQL却没有提供这样的语法. 最近由于从Oracle 迁移到 ...

  9. mysql实现row_number()和row_number() over(partition by)

    row_number() 仅仅是价格排序字段 select @rownum := @rownum + 1 as rn, t.*from (select @rownum := 0) r, test_ta ...

  10. Mysql @RN :方式ROW_NUMBER的实现方法

    目录 1简介... 1 2 准备... 1 2.1 环境说明... 1 3 安装... 2 4 配置... 2 5 使用... 2 5.1 验证实验... 2 5.2 问题分析... 4 6 延展.. ...

最新文章

  1. 有符号数据的符号位扩展
  2. shell 输入输出重定向
  3. C语言 | 编程实现2
  4. 接收超时死信的死信交换机
  5. 用“Web的思想”做PC客户端
  6. poj 1256 Anagram—next_permutation的神奇应用
  7. cross_val_score 如何对孤立森林_【收藏】森林防火手抄报素材汇总!
  8. python中curve fit_scipy.optimize.curve_fit函数用法解析
  9. kotlin-2(IdeaIU-2018.2汉化破解)
  10. django -- url 的 命名空间
  11. 人工智能入门——机器学习小案例(二)
  12. 深度学习入门:基于Python的理论与实现——第一章Python入门
  13. 苹果6s强制删除id锁_付费苹果解锁软件 屏幕解锁及AppleID解锁
  14. 通过R访问世界银行数据(World Bank Data)分析经济
  15. 饭店点餐系统的设计与实现
  16. 计算机操作者权限恢复,win10系统提示“需要管理员权限”的还原方案
  17. html图片标签img的介绍以及基本用法详解
  18. 极限编程-拥抱变化阅读感想(一)
  19. 渗透测试思路 - 工具篇
  20. MAC系统免驱显卡汇总

热门文章

  1. 几种服务器监控系统,几种服务器监控系统
  2. 搞定Prometheus普罗米修斯监控系统
  3. Lumion 9.0 动画渲染的10个技术技巧
  4. 听说你不会用Lumion做通道图?
  5. 如何培训新进的软件测试人员
  6. k8s查看token,discovery-token-ca-cert-hash
  7. CAD命令输入、结束、重复、撤销
  8. 【CSS3盒子模型新样式】boder-box
  9. Fresco按照宽高压缩图片的方法
  10. java压缩JPG 、PNG图片