oracle排序

oracle在使用rownum进行排序的时候,有时是会出错的,所以可以考虑使用函数实现排序:

1.row_number() over()
row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码。row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开始排序)。

2.rank() over()
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)

3.dense_rank() over()
dense_rank()也是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的。

三个函数的使用方法一样,下面举两例:

select row_number() over (order by submit_time) t_rownum,a.* from T_YNYD_SURVEY a where QUESTION_NO=‘1‘
select row_number() over (partition by QUESTION_NO order by submit_time) t_rownum,a.* from T_YNYD_SURVEY a
时间: 2024-10-05 12:10:39

oracle排序的相关文章

Oracle 排序

按拼音排序 select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_PINYIN_M'); 按部首排序 select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_STROKE_M'); 按笔画排序 select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_RADICAL_M'); 排序后

jsp+oracle 排序分页+Pageutil类

1.rownum和排序 Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了. SQL> select rownum ,id,name from student order by name; ROWNUM ID      NAME 3 200003 李三 2 200002 王二 1 200001 张一 4 200004 赵四 可以看出,rownum并不是按照name列来生成的序号.系统是按照记录插入时的顺序给记录排的号,rowid

oracle排序操作

查询排序最多的SQL语句: WITH sql_workarea AS (SELECT sql_id || '_' || child_number sql_id_child,         operation_type operation,         last_execution last_exec,         round(active_time / 1000000, 2) seconds,         optimal_executions || '/' || multipass

Oracle 排序中使用nulls first 或者nulls last 语法

-原理 Nulls first和nulls last是Oracle Order by支持的语法 如果Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(不管是asc 还是 desc) 如果Order by 中指定了表达式Nulls last则表示null值的记录将排在最后 (不管是asc 还是 desc) 使用语法如下: --将nulls始终放在最前 select * from zl_cbqc order by cb_ld nulls first --将nul

oracle 排序 row_number() over(partition by 排序字段)

业务描述:按t.truckId,t.riskCode 分组,每个分组里有分数,取分组中分数最大的那条记录. 如:A1 B1   5  6 A1  B1   5  3 A1  B2   2  5 A1  B2   2  1 已经按 A,B分组了 但是 我需要第一条和第三条数据,就可以用这个row_number() over(partition by  排序字段)降序 然后取 rowseq = 1 的数据就可以拿到了 SELECT gg.sumScore AS sumScore, gg.number

DBA_Oracle Sort排序处理(概念)

2014-12-18 BaoXinjian 一.摘要 Oracle排序的基础 Oracle会话首先在内存中进行排序,当Oracle需要存储数据到临时表或者为哈西排序建立哈希表时,并且也会首先在内存中进行操作,虽然这两个操作不需要排序操作,但是它们在Oracle中的处理方式是相同的. 如果操作使用内存超过了阈值,Oracle会将操作分为多个较小的操作以使每个可以在内存中操作.部分结果将会被写入磁盘的临时表空间,任何一个会话可以使用的内存数依赖于初始化参数的设置,如果workarea_size_po

排序,分组和集合操作

排序操作 排序是计算机承担的最基本操作之一,尤其是在数据库处理领域,oracle也不例外.可能需要oracle排序数据的操作包括以下几种: (1)创建一个索引 (2)通过group by,unique或distinct关键字对数据进行分组或聚合 (3)因为使用order by子句使得数据按照排好的顺序返回 (4)使用排序合并方法联结表或结果集 (5)使用集合操作union,intersect或minus (6)执行特定的子查询 查询可能需要可观的资源,具体说明如下: CPU总是要消耗的.需要CP

oracle子查询中not in后面不能为null值的理解

首先说说oracle中的null值吧. null在oracle中代表未知,表示可能有,也可能没有.任何与null值的普通运算都为null,但可以用一些函数来处理null值,oracle排序中默认null最大. 接着进入正文 这里in后面有null,能返回数据 但加了not后,就不能返回数据了 这里的in后面的句子可以理解为or拼接,即 id in (200,201,null)可以等价于id=200 or id=201or id=null, id not in (200,201,null)可以等价

数据库对null值的处理

Oracle排序中NULL值处理的五种常用方法 1.缺省处理 Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前 2.使用nvl函数 nvl函数可以将输入参数为空时转换为一特定值,如 nvl(employee_name,'张三')表示当employee_name为空时则返回'张三',如果不为空则返回employee_name 通过这个函数可以定制null的排序位置. 3.使用decode函数 decode函数比nvl函数更强大,同样