oracle单列去重,oracle查询时单列去重和查询多列且对单列去重

oracle查询单列时去重,最常用的应该时distinct了

例如有如下的表(企业信息注册表),表中数据如下

cb14b90af509eac1bc61233e6de5971a.png

查询单列并去重,如查询企业名称列corporname列,查看所有的企业名称

查询单列,用distinct就可以实现

913e6c795aa88a48eb844fd2e8afa862.png

2,如果想查询企业所有的信息 ,并根据企业名称去重,相同企业展示最新的注册时间registTime

这时候如果在使用distinc就实现不了,如下是使用distinct的结果,相同企业B,应该展示最新的注册时间20200422,但使用distinct并没有达到效果

select distinct t.corporname,t.corporid ,t.registtime from register t

25fccfae064c6206e1333b499d210402.png

当 distinct 作用在多个字段的时候,它只会将所有字段值都相同的记录“去重”掉,显然这里的企业B数据不满足此条件,其corporid和registtime不一致。

关键字 distinct 只能放在 SQL 语句中所有字段的最前面才能起作用,如果放错位置,SQL 执行时会报错,缺失表达式

如下:

c38592a15b27c9edbdb5fe0a968d09ce.png

3.使用rank() over()

这时候就需要用到rank() over()了,查询多列,并对其中一列按指定条件去重

语法 rank() over(partition by 列1 order by 列2  按列1分组,并在列1分组的基础上,对每个组按列b排名,默认升序(类似oralce分页中的rowid)

如下就可以实现查询企业所有的信息 ,并根据企业名称去重,相同企业展示最新的注册时间registTime

select corporid, corporname, registtime

from (select t.*,

rank() over(partition by t.corporname order byt.registtime desc) rn

from register t) k

where rn = 1

45372eae9f23c21d6dfa8a8564ba3fd2.png

本文参考如下资源

https://blog.csdn.net/DavieSmile/article/details/89216441

https://www.cnblogs.com/mycoding/archive/2010/05/29/1747065.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值