- 浏览: 151161 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
陈碧滔:
java获取工程目录路径 -
stevenjohn:
楼主能上传一下源代码吗?
ActiveMQ5.0实战三:使用Spring发送,消费topic和queue消息 -
指挥家:
讲的很好!
Foxmail6收发Web mail邮箱邮件实现原理 -
azhqiang:
谢谢你啊。呵呵
flex最全的表单验证
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。
看几个SQL语句:
语句一:
select row_number() over(order by sale/cnt desc) as sort, sale/cnt
from (
select -60 as sale,3 as cnt from dual union
select 24 as sale,6 as cnt from dual union
select 50 as sale,5 as cnt from dual union
select -20 as sale,2 as cnt from dual union
select 40 as sale,8 as cnt from dual);
执行结果:
SORT SALE/CNT
---------- ----------
1 10
2 5
3 4
4 -10
5 -20
语句二:查询员工的工资,按部门排序
select ename,sal,row_number() over (partition by deptno order by sal desc) as sal_order from scott.emp;
执行结果:
ENAME SAL SAL_ORDER
-------------------- ---------- ----------
KING 5000 1
CLARK 2450 2
MILLER 1300 3
SCOTT 3000 1
FORD 3000 2
JONES 2975 3
ADAMS 1100 4
SMITH 800 5
BLAKE 2850 1
ALLEN 1600 2
TURNER 1500 3
WARD 1250 4
MARTIN 1250 5
JAMES 950 6
已选择14行。
语句三:查询每个部门的最高工资
select deptno,ename,sal from
(select deptno,ename,sal,row_number() over (partition by deptno order by sal desc) as sal_order
from scott.emp) where sal_order <2;
执行结果:
DEPTNO ENAME SAL
---------- -------------------- ----------
10 KING 5000
20 SCOTT 3000
30 BLAKE 2850
已选择3行。
语句四:
select deptno,sal,rank() over (partition by deptno order by sal) as rank_order from scott.emp order by deptno;
执行结果:
DEPTNO SAL RANK_ORDER
---------- ---------- ----------
10 1300 1
10 2450 2
10 5000 3
20 800 1
20 1100 2
20 2975 3
20 3000 4
20 3000 4
30 950 1
30 1250 2
30 1250 2
30 1500 4
30 1600 5
30 2850 6
已选择14行。
语句五:
select deptno,sal,dense_rank() over(partition by deptno order by sal) as dense_rank_order from scott.emp order by deptn;
执行结果:
DEPTNO SAL DENSE_RANK_ORDER
---------- ---------- ----------------
10 1300 1
10 2450 2
10 5000 3
20 800 1
20 1100 2
20 2975 3
20 3000 4
20 3000 4
30 950 1
30 1250 2
30 1250 2
30 1500 3
30 1600 4
30 2850 5
已选择14行。
语句六:
select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) as lag_ from scott.emp order by deptno;
执行结果:
DEPTNO ENAME SAL LAG_
---------- -------------------- ---------- --------------------
10 CLARK 2450
10 KING 5000 CLARK
10 MILLER 1300 KING
20 ADAMS 1100
20 FORD 3000 ADAMS
20 JONES 2975 FORD
20 SCOTT 3000 JONES
20 SMITH 800 SCOTT
30 ALLEN 1600
30 BLAKE 2850 ALLEN
30 JAMES 950 BLAKE
30 MARTIN 1250 JAMES
30 TURNER 1500 MARTIN
30 WARD 1250 TURNER
已选择14行。
发表评论
-
Oracle导出导入dmp文件(转)
2010-11-17 13:41 4671Oracle数据导入导出imp/exp ... -
orcle中sys_connect_by_path的用法
2010-10-28 10:21 970sys_connect_by_path的几种 ... -
使用plsql一些常见的操作
2010-09-01 23:51 1015/**创建一个访问分析表*/ create table Ac ... -
PL/SQL编程简介(转)
2010-08-12 11:24 804Oracle在数据库中引入了一种过程化编程语言,称为PL/SQ ... -
oracle函数手册(带示例)
2010-07-30 15:12 804oracle函数手册 SQL中的单记录函数 1.ASCII 返 ... -
Oracle分析函数参考手册[下][转载自JavaEye]
2010-07-30 15:08 829=============================== ... -
Oracle分析函数参考手册[上][转载自JavaEye]
2010-07-30 15:07 778=============================== ... -
Oracle 分析函数的使用(zt)
2010-07-30 15:07 6862/11/2005 09:43 FPOracle 分析函数使用 ... -
Oracle分析函数参考手册
2010-07-30 15:06 68022/06/2005 12:22 FP Oracle从8.1. ... -
Oracle函数列表速查
2010-07-30 15:03 666PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数 ... -
oracle分析函数(3)
2010-07-30 14:59 779【2】找出每个区域订单总额排名前3的大客户: SQL &g ... -
oracle分析函数(2)
2010-07-30 14:58 790注意这里有3条记录的订单总额是一样的。假如我们现在需要筛选排名 ... -
oracle分析函数(1)
2010-07-30 14:57 742一.分析函数(OVER) 目录: ============ ... -
用SQL语句添加删除修改字段
2010-07-27 14:19 1377增加字段alter table docdsp add dsp ... -
oracle 存储过程的基本语法
2010-07-13 18:57 6891.基本结构 CREATE OR REPLACE PROCED ... -
oracle 字符串连接
2010-06-28 15:26 893字符串连接 SQL> select 'abc' || ' ... -
系统重装后,oracle数据库中数据快速恢复
2010-06-18 15:56 14881. 准备工作把旧的ORACLE所有文件都COPY备份下来 ... -
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
2010-06-06 19:05 802Insert是T-sql中常用语句,Insert ... -
Oracle字符串处理函数
2010-06-02 19:27 1322项目中有涉及存储过程对字符串的处理,所以就将在网上查找到的资料 ...
相关推荐
row_number() over ([partition by col1] order by col2) as 别名 ``` 其中,`partition by col1` 用于指定分区的列,`order by col2` 用于指定排序的列。 在使用 row_number()over 函数时,需要注意以下几点: * ...
row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与rownum的区别在于:使用rownum进行排序的...
首先,`row_number() over(partition by col1 order by col2)` 这个表达式说明了row_number()函数的工作原理。`partition by col1`将数据集分成多个分区,每个分区由col1的相同值组成。然后,在每个分区内部,`order...
ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序 而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的) RANK() 类似,不过RANK 排序的时候跟派名次一样,...
SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY col1) AS row_num FROM table_name; ``` 2. **RANK()**:计算每行在排序后的结果中的排名,如果有相同的值,它们将获得相同的排名,并且下一个排名将被跳过。 ...
使用ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) 先进行分组 注:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). sql语句为: select ...
ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY ROWNUM) AS rn2, col3, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3 ORDER BY ROWNUM) AS rn3 FROM t ); ``` 这里通过`ROW_NUMBER()`函数实现了列...
SELECT *, ROW_NUMBER() OVER(PARTITION BY col1, col2, ..., coln ORDER BY id) as rn FROM #tempTable ) t WHERE t.rn = 1 -- 或者创建副本表 SELECT * INTO newTable FROM table DELETE FROM newTable ...
ranking_function over([partition by col_list] order by col_list) ROW_NUMBER:在排序的基础上对所有列进行连续的数字进行标识。 执行顺序:为了计算列值,优化器首先需要把数据在分区列上进行排序,然后在对...
SELECT row_number() over(partition by col1 order by col2) as num FROM table1 MySQL: SET @rank = 0; SET @pdept = ''; SELECT num1 AS num FROM ( SELECT IF(@pdept=col1, @rank:=@rank+1, @rank:=1) AS num1...
ROW_NUMBER() OVER (ORDER BY 1) AS id FROM DUAL; ``` Oracle行转列操作可以使用多种方法来实现,包括UNION ALL、MODEL、COLLECTION、AGGREGATE FUNCTION、LISTAGG、REGEXP_SPLIT等方法。这些方法可以满足不同的...
SELECT Col1, Col2, ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY Col1) AS rn FROM Dup1 ``` 接着,通过CTE删除排名大于1的行: ```sql WITH DupsD AS ( SELECT Col1, Col2, ROW_NUMBER() OVER ...
* ROW_NUMBER() :不间断,序号不重复,例如 1、2、3、4、5(1、2 可能是相同的值)。 3. 取值型函数: * LAG(COL, N, DEFAULT_VAL) :用于统计窗口内往上第n行值。 * LEAD(COL, N, DEFAULT_VAL) :用于统计窗口内...
- `ROW_NUMBER()`窗口函数:MySQL无此功能,但可以利用用户变量模拟实现,如Oracle的`row_number() over(partition by col1 order by col2)`。 - `ROWNUM`行号:MySQL中没有直接等价的行号,需用用户变量模拟,如...
在使用窗口函数时,我们可以指定一个窗口(PARTITION BY),排序方式(ORDER BY),甚至窗口大小(frame_clause),这使得窗口函数具有高度的灵活性。 1. **窗口函数的基本结构** 使用窗口函数的语法通常如下: `...
* 删除重复记录:DELETE FROM table_name WHERE rowid IN (SELECT rid FROM (SELECT rowid rid, ROW_NUMBER() OVER (PARTITION BY .. ORDER BY rowid) FROM table_name) WHERE rn > 1); * 提取数据库中表的所有字段...
单字段时:create table 表名 (col1 char(8), cno char(4) REFERENCE course); 多个字段时,在最后加上 Foreign Key (字段名) REFERENCE 表名(字段) 连带删除选项 (on delete cascade 当指定时,如果父表中的记录...