Oracle函数笔记

oracle查看执行计划:
1:EXPLAIN PLAN for 要执行的sql
2:select * from table (dbms_xplan.display);

1:wm_concat()函数

会将分组内的多条数据的指定字段通过,拼接填充至一个指定字段
eg:表test_table如下:

xyzc
x1y1z1c
x2y2z2c
x3y3z3c
SELECT	wm_concat(x) joinx,
 		wm_concat(y) joiny, 
 		wm_concat(z)    joinz, 
 		c
 	from test_table  group by c

上述sql查询后查询结果如下:

joinxjoinyjoinzc
x1,x2,x3y1,y2,y3z1,z2,z3c

2:row_number()

ROW_NUMBER 是一个解析函数。它为应用它的每一行(分区中的每一行或查询返回的每一行)分配一个唯一编号,在 order_by_clause 中指定的有序行序列中,从 1 开始。
通过在检索指定范围的 ROW_NUMBER 值的查询中嵌套使用 ROW_NUMBER 的子查询,您可以从内部查询的结果中找到精确的行子集。该函数的这种使用使您可以实现 top-N、bottom-N 和 inner-N 报告。为了获得一致的结果,查询必须确保确定的排序顺序。
您不能使用 ROW_NUMBER 或 expr 的任何其他分析函数来嵌套分析函数。但是,您可以为 expr 使用其他内置函数表达式。有关有效形式的 expr 的信息,请参阅“关于 SQL 表达式”.
eg: 从emp_info中查询出每个员工钱最多的那条记录的信息

select *
from (select (row_number() over (partition by user_id order by money desc)) rd, a.*
      from emp_info a)
where rd = 1;

3: rank()

rank函数用于返回结果集的分区内每行的排名,行的排名是相关行之前的排名数加一。rank与row_number函数不同的是,rank函数考虑到over子句中排序字段值相同的情况,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个,也就是相关行之前的排名数加一,可以理解为根据当前的记录数生成序号,后面的记录依此类推。
类似与row_number()函数只不过这边的结果会出现同号类似于排名。如1,2,2,4。而DENSE_RANK()函数则不会跳过,结果类似于1,2,2,3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值