oracle sql 去重复记录不用distinct如何实现

 更新时间:2012年11月25日 13:19:08   作者:  
本文将详细介绍oracle sql 去重复记录不用distinct如何实现,需要了解的朋友可以参考下
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 。
select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录
所以用distinct达不到想要的效果,用group by 可以解决这个问题。
例如要显示的字段为A、B、C三个,而A字段的内容不能重复可以用下面的语句:
select A, min(B),min(C),count(*) from [table] where [条件] group by A
having [条件] order by A desc
为了显示标题头好看点可以把select A, min(B),min(C),count(*) 换称select A as A, min(B) as B,min(C) as C,count(*) as 重复次数
显示出来的字段和排序字段都要包括在group by 中
但显示出来的字段包有min,max,count,avg,sum等聚合函数时可以不在group by 中
如上句的min(B),min(C),count(*)
一般条件写在where 后面
有聚合函数的条件写在having 后面
如果在上句中having加 count(*)>1 就可以查出记录A的重复次数大于1的记录
如果在上句中having加 count(*)>2 就可以查出记录A的重复次数大于2的记录
如果在上句中having加 count(*)>=1 就可以查出所有的记录,但重复的只显示一条,并且后面有显示重复的次数----这就是所需要的结果,而且语句可以通过hibernate
下面语句可以查询出那些数据是重复的:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
将上面的>号改为=号就可以查询出没有重复的数据了。
例如
复制代码 代码如下:

select count(*) from (select gcmc,gkrq,count(*) from gczbxx_zhao t group by gcmc,gkrq having
count(*)>=1 order by GKRQ)
select * from gczbxx_zhao where viewid in ( select max(viewid) from gczbxx_zhao group by
gcmc ) order by gkrq desc ---还是这个可行

有一面试题说:distinct去重复的效率很底下,我在网上看到这遍文章的方法好像说是用 group by having 效率很高了?
我在了一个测试,有一商品表,26万条记录,只有商品编号建了索引,对品牌名称字段做 distinct
复制代码 代码如下:

select brand,count(*) from tab_commbaseinfo group by brand having count(*) =1

平均时间是:0.453
复制代码 代码如下:

select distinct brand from tab_commbaseinfo

平均时间是:0.39
搞不懂是否还有其它方法。

相关文章

  • 基于Oracle的高性能动态SQL程序开发

    基于Oracle的高性能动态SQL程序开发

    对动态SQL的程序开发进行了总结,并结合笔者实际开发经验给出若干开发技巧
    2007-03-03
  • Oracle行级锁的特殊用法简析

    Oracle行级锁的特殊用法简析

    Oracle有许多的锁,各种锁的效用是不一样的。下面重点介绍Oracle行级锁,Oracle行级锁只对用户正在访问的行进行锁定。可以更好的保证数据的安全性,需要的朋友可以了解下
    2012-11-11
  • Oracle中的触发器trigger

    Oracle中的触发器trigger

    这篇文章介绍了Oracle中的触发器trigger,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • PL/SQL数据类型及操作符

    PL/SQL数据类型及操作符

    PL/SQL数据类型及操作符...
    2007-03-03
  • Oracle怎么删除数据,Oracle数据删除的三种方式

    Oracle怎么删除数据,Oracle数据删除的三种方式

    这篇文章主要介绍了Oracle中删除数据的三种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • oracle常用分析函数与聚合函数的用法

    oracle常用分析函数与聚合函数的用法

    今天小编就为大家分享一篇关于oracle常用分析函数与聚合函数的用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 随机获取oracle数据库中的任意一行数据(rownum)示例介绍

    随机获取oracle数据库中的任意一行数据(rownum)示例介绍

    对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀
    2014-07-07
  • 在Oracle网络结构解决连接问题

    在Oracle网络结构解决连接问题

    在Oracle网络结构解决连接问题...
    2007-03-03
  • Oracle自动备份及自动备份步骤

    Oracle自动备份及自动备份步骤

    这篇文章主要介绍了Oracle自动备份及自动备份步骤的相关资料,需要的朋友可以参考下
    2016-02-02
  • Oracle存储过程语法代码示例详解

    Oracle存储过程语法代码示例详解

    本文讲解Oracle存储过程语法,包括总体结构、存储过程声明、参数定义、变量声明、游标声明、行数据类型声明、变量赋值、条件判断、WHILE循环、FOR循环、游标使用、异常捕捉、异常处理、存储过程调用、存储过程代码示例调用代码示例、调用结果展示,感兴趣的朋友一起看看吧
    2025-04-04

最新评论