MySQL 实现row_number() 分组排序功能

摘要:
数据库基本脚本CREATEABLE `a`(`ID`INT(10)NULLDEFAULTNULL,`class`INT)NULLDEFAULTNULL,`score`INT;插入空隙(1,1110);插入空隙(2,1120

数据库基本脚本

CREATE TABLE `a` (
	`ID` INT(10) NULL DEFAULT NULL,
	`class` INT(10) NULL DEFAULT NULL,
	`score` INT(10) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

insert into a values (1,1,110);
insert into a values (2,1,120);
insert into a values (3,1,130);
insert into a values (4,1,140);
insert into a values (5,2,210);
insert into a values (6,2,220);
insert into a values (7,2,230);
insert into a values (8,2,240);
insert into a values (9,3,310);
insert into a values (10,3,320);
insert into a values (11,4,410);

 1. 对 class进行分组 取每组的前2条

select id,class,score,rank from (
select b.id,b.class,b.score,@rownum:=@rownum+1 ,
if(@pdept=b.class,@rank:=@rank+1,@rank:=1) as rank,
@pdept:=b.class
from (
select id,class,score from a order by id 
) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c ) result
having rank <3 ;

 rank <3 指的相当月ruwnum<3 每组都自动给上了序号.多少条记录就多少个序号.指的是每组的.

 2.  对 class 进行分组   取记录满足两天的,也就是rownum=2 的数据

select id,class,score,rank from (
select b.id,b.class,b.score,@rownum:=@rownum+1 ,
if(@pdept=b.class,@rank:=@rank+1,@rank:=1) as rank,
@pdept:=b.class
from (
select id,class,score from a order by score desc 
) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c ) result
having rank =2 ;

  

免责声明:文章转载自《MySQL 实现row_number() 分组排序功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Andrioid Studio生成jar, aar包Feature.js-轻量级浏览器特性检测JavaScript库插件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL 百万级分页优化(Mysql千万级快速分页)(转)

http://www.jb51.net/article/31868.htm 以下分享一点我的经验 一般刚开始学SQL的时候,会这样写 复制代码 代码如下: SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但在数据达到百万级的时候,这样写会慢死 复制代码 代码如下: SELECT * FROM t...

解决mysql 数据库连接密码

解决mysql 数据库连接密码用到的命令: bin>net stop mysql bin>mysqld --skip-grant-tables bin>mysql mysql>use mysql mysql>update user set password=password("123456") where user="root...

MySQL3:索引

什么是索引 索引是对数据库表中一列或者多列的值进行排序的一种结构,所引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜索数据文件,而不必查看所有数据。 索引的含义和特点 索引是一个单独的、存储在磁盘上的...

01、MySQL_简介

数据库概念   数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。   数据库:存储数据的仓库 数据库分类 网络数据库   网络数据库是指把数据库技术引入到计算机网络系统中,借助于网络技术将存储于数据库中的大量信息及时发布出去;而计算机网络借助于成熟的数据库技术对网络中的各种数据进行有效管理,并实现用户与网络中的...

mysql判断表记录是否存在,不存在则插入新纪录

开始以为和SQL Server一样,使用not exists进行判断,结果不行: IF NOT EXISTS (SELECT 1 FROM vrv_paw_template WHERE templateName='自定义' OR templateFileName='policycustom' LIMIT 1) INSERT INTO vrv_paw_te...

docker下安装mysql镜像

一、拉取mysql镜像 docker pull mysql 二、启动容器,并把配置文件和数据文件挂在到本地磁盘,MYSQL_ROOT_PASSWORD:配置root默认密码 docker run -di --name mysql -p 3306:3306 -v D:mysqlconf:/etc/mysql/conf.d -v D:mysqldata:/va...