DB2查询获取排序号
2023-09-27 14:27:26 时间
相信大家都会有这样的需求,即对一张表进行排序查询的同时获取排序号。那么在使用mysql数据库时,我们通常通过变量来实现,或者客户端代码里进行fetch +1操作。
而在DB2数据库里,直接提供了获取行号的SQL语法,一条简单的SQL语句就能实现这个需求。
superdba Super, not a DBA, not a programmer. May be a singer, poet, ITer, and so on.
相信大家都会有这样的需求,即对一张表进行排序查询的同时获取排序号。那么在使用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);
当前测试表数据如下,
首先实现一个简单的需求,即对所有的分数从高到底进行排序,并显示每行数据的行号。
可使用如下SQL语句进行查询:
select NAME, COURSE, SCORE, ROW_NUMBER() OVER (ORDER BY SCORE DESC) SORTNO from sorttest;
返回结果如下,
从上面的返回结果看到,查询的结果集里包含数据的行号。
呃,这个简单的SQL确实能够实现排序时获取排序号的需求,不过这么排序好像意义并不是很明显。
分区即分组的意思,分区排序支持按照分组字段为单位生成相对隔离的排序号。来看下面的例子。
同样是这张表,另外一个需求可能要显得有意义一些。我们把每个同学的成绩按照分数进行单独排序,并且按照分数从高到低进行编号。
这里我们使用分区排序的语法来实现,如下,
select NAME, COURSE, SCORE, ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY SCORE DESC) SORTNO from sorttest;
获取的结果集如下,
从结果集中我们看到,排序号是按照每个同学为单位进行单独编号的,这个看似苛刻需求在这里只是通过一个简单的SQL语句就实现了。
对于排序编号这点上,DB2支持的还是比较强大的,SQL语法使用也很方便,“小特性,大用处”,不可小视。
superdba Super, not a DBA, not a programmer. May be a singer, poet, ITer, and so on.
相关文章
- DB2与Sybase/Oracle/Informix的比较
- db2数据库还原
- IBM db2安装好了以后,启动不了服务
- db2迁移至oracle过程中的问题
- Oracle、DB2、MySql、SQLServer JDBC驱动
- DB2使用存储过程插入数据
- IBM新版本TSM增加重复数据删除和DB2集成
- IBM新版本TSM增加重复数据删除和DB2集成
- python操作db2和mysql ,ibm_db
- python 连接 db2
- db2操作 连接、备份、恢复db2
- 一次DB2数据库连接失败(SQLSTATE=08001)的解决方法
- DB2数据库中SQL语句中使用or和and的关键字的时候注意事项
- Oracle数据库和DB2数据库分页SQL的区别举例
- 史上最全的 DB2 错误代码大全
- db2常用操作命令
- db2 优化基础 查询运行时间最长的SQL
- DB2数据库生成html巡检报告
- Aix db2 经user a using b连接时报SQL30082N Security processing failed with reason "42"
- dotConnect for DB2数据提供者
- DB2备份+日志恢复并前滚数据库
- 有效的在Windows和UNIX/Linux平台上完全卸载DB2
- db2 9.7 for linux 5.4 安装详细步骤