Oracle数据库下 distinct 与row_number() over的用法

[b]一.先介绍下Oracle去重关键字distinct的用法:[/b]

1.distinct对单表去重是比较简单的,如:

select distinct r.user_id r.name from ap_user_role r;


这个是对单个用户只出一条记录的用法。


2.对多个表的联合查询去重使用distinct方法,请看下面的方法,判断是否有问题?

(1).案例一:

 select distinct r.user_id ,r.name , u.id,u.sex from ap_user_role r, ap_user u where

u.id=r.user_id;


用法正确吗?

(2).案例二:

 select distinct t.user_id from (

select r.user_id,r.name, u.id,u.sex from ap_user_role r, ap_user u

where u.id=r.user_id

) t


这两种用法那种正确呢?

[b]二.再来介绍下Oracle函数ROW_NUMBER() OVER的用法:[/b]

[b]语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)[/b]

简单的说row_number()从一开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER()

OVER (ORDER BY create_time DESC) 是先把create_time列降序,再为降序以后的每条

create_time记录返回一个序号。

如何使用呢?请看以下案例:

select t.* from (

select u.id, u.name, r.user_id,r.name, row_number() over(partition by u.id order

by u.create_time desc) as num

from ap_user u, ap_user_role r where u.id=r.user_id

) t where t.num=1;


请试一下这几种用法,查看下结果是如何的呢?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值