DB2查询获取排序号

简介:   相信大家都会有这样的需求,即对一张表进行排序查询的同时获取排序号。那么在使用mysql数据库时,我们通常通过变量来实现,或者客户端代码里进行fetch +1操作。   而在DB2数据库里,直接提供了获取行号的SQL语法,一条简单的SQL语句就能实现这个需求。

  相信大家都会有这样的需求,即对一张表进行排序查询的同时获取排序号。那么在使用mysql数据库时,我们通常通过变量来实现,或者客户端代码里进行fetch循环 +1操作。
  而在DB2数据库里,直接提供了获取行号的SQL语法,一条简单的SQL语句就能实现这个需求。

接下来的测试用例如下:

create table sorttest(name varchar(20),course varchar(20),score int);

insert into sorttest values('张三','语文',80);
insert into sorttest values('张三','数学',70);
insert into sorttest values('张三','英语',90);

insert into sorttest values('李四','语文',67);
insert into sorttest values('李四','数学',75);
insert into sorttest values('李四','英语',85);

当前测试表数据如下,
table

简单排序

  首先实现一个简单的需求,即对所有的分数从高到底进行排序,并显示每行数据的行号。

可使用如下SQL语句进行查询:

select NAME, COURSE, SCORE, ROW_NUMBER() OVER (ORDER BY SCORE DESC) SORTNO 
        from  sorttest;

返回结果如下,
image

从上面的返回结果看到,查询的结果集里包含数据的行号。

呃,这个简单的SQL确实能够实现排序时获取排序号的需求,不过这么排序好像意义并不是很明显。

分区排序

  分区即分组的意思,分区排序支持按照分组字段为单位生成相对隔离的排序号。来看下面的例子。
  同样是这张表,另外一个需求可能要显得有意义一些。我们把每个同学的成绩按照分数进行单独排序,并且按照分数从高到低进行编号。

这里我们使用分区排序的语法来实现,如下,

select NAME, COURSE, SCORE, ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY SCORE DESC) SORTNO 
        from  sorttest;

获取的结果集如下,
image

  从结果集中我们看到,排序号是按照每个同学为单位进行单独编号的,这个看似苛刻需求在这里只是通过一个简单的SQL语句就实现了。

  对于排序编号这点上,DB2支持的还是比较强大的,SQL语法使用也很方便,“小特性,大用处”,不可小视。

目录
相关文章
|
关系型数据库 MySQL
Mysql排序字段为NULL如何排序
讲述工作中遇到的Mysql排序字段为NULL时如何排序
|
6月前
|
关系型数据库 MySQL 数据库
MySQL ORDER BY(排序) 语句
【1月更文挑战第7天】MySQL 使用讲解 第07期
|
关系型数据库 MySQL
MySql order by 排序
MySql order by 排序
38 0
|
SQL 关系型数据库 MySQL
mysql的group by与order by同时使用导致排序
mysql的group by与order by同时使用导致排序
119 0
|
关系型数据库 MySQL 数据库
数据的查询与添加:解析MySQL中的SELECT和INSERT操作
在数据库管理中,SELECT和INSERT操作是日常工作中的重要环节,用于数据的获取和添加。了解如何正确使用这两个操作是数据库操作的关键。
203 0
|
SQL 关系型数据库 MySQL
MySQL ORDER BY:对查询结果进行排序
MySQL ORDER BY:对查询结果进行排序
96 0
|
SQL 关系型数据库 MySQL
mysql中 order by 排序
mysql中 order by 排序
51 0
|
SQL 关系型数据库 MySQL
MYSQL分页查询时没有用ORDER BY出现数据重复的问题
MYSQL分页查询时没有用ORDER BY出现数据重复的问题
265 0
|
SQL 关系型数据库 MySQL
MYSQL中ORDER BY(排序查询)
`[NOT] ORDER BY 字段1[ASC/DESC], 字段2[[ASC/DESC] ] ……` `ASC`表示升序,`DESC`表示降序 如果不写,默认为升序
146 0
MYSQL中ORDER BY(排序查询)
|
关系型数据库 MySQL
朴实!简单!依你所好,MySQL排序查询ORDER BY
朴实!简单!依你所好,MySQL排序查询ORDER BY
120 0