当前位置: 代码网 > it编程>数据库>Mysql > MySQL5.7实现row_number()和over()函数

MySQL5.7实现row_number()和over()函数

2024年06月12日 Mysql 我要评论
一、创建测试数据库 db_test-- 创建测试数据库 db_testcreate database /*!32312 if not exists*/`db_test` /*!40100 defaul

一、创建测试数据库 db_test

-- 创建测试数据库 db_test
create database /*!32312 if not exists*/`db_test` /*!40100 default character set utf8 */;

二、使用 db_test 数据库

-- 使用 db_test 数据库
use `db_test`; /*table structure for table `test1` */

三、先删除测试表看看

-- 先删除测试表看看
drop table if exists `test1`;

四、创建测试表

-- 创建测试表
create table `test1` ( 
  `id` int(10) not null, 
  `score` int(20) default null, 
  `class` char(10) collate utf8_bin default null, 
  `name` char(20) collate utf8_bin default null, 
  primary key (`id`) 
) engine=innodb default charset=utf8 collate=utf8_bin;

五、测试表刷数

-- 测试表刷数
/*data for the table `test1` */
insert into `test1`(`id`,`score`,`class`,`name`) values 
(1,100,'语文','张三'),
(2,98,'语文','李四'),
(3,98,'语文','王五'),
(4,98,'数学','张三'),
(5,96,'数学','李四'),
(6,92,'数学','王五'),
(7,85,'数学','张三'),
(8,96,'语文','张三'),
(9,96,'语文','张三'),
(10,91,'语文','张三'),
(11,91,null,'张三');

六、查询测试表

-- 查询测试表
select * from test1;

七、mysql5.7实现 row_number() over()函数的功能

-- mysql5.7实现 row_number() over()函数的功能
select id
      ,class
      ,score
      ,rank 
  from (select b.*
              -- 定义用户变量 @rownum 来记录数据的行号。通过赋值语句 @rownum := @rownum + 1 来累加达到递增行号。
              ,@rownum := @rownum+1
              -- 如果当前分组编号和上一次分组编号相同,则 @rank (对每一组的数据进行编号)值加1,否则表示为新的分组,从1开始
              ,if(@pdept = b.class, @rank := @rank + 1, @rank := 1) as rank
              -- 定义变量 @pdept 用来保存上一次的分组id
              ,@pdept := b.class 
              -- 这里的排序不确定是否需要,保险点还是加上吧
          from (select * from test1 a order by a.class, a.score desc) b 
              -- 初始化自定义变量值
              ,(select @rownum :=0, @pdept := null, @rank:=0) c
         -- 该排序必须,否则结果会不对
         order by b.class, b.score desc) result
 order by class, rank;

到此这篇关于mysql5.7实现row_number() over()函数的文章就介绍到这了,更多相关mysql5.7 row_number() over()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com