oracle中去重复记录 不用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

搞不懂是否还有其它方法。

时间: 2024-07-28 18:17:36

oracle中去重复记录 不用distinct的相关文章

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

用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 . select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值. select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录 所以用distinct达不到想要的效果,用group by 可以解决这个问题. 例如要显示的字

mysql中过滤重复记录之distinct用法

下面我们就通过几个简单的 Query 示例来展示一下 DISTINCT 的实现. 1.首先看看通过松散索引扫描完成 DISTINCT 的操作:  代码如下 复制代码 sky@localhost : example 11:03:41> EXPLAIN SELECT DISTINCT group_id     -> FROM group_messageG *************************** 1. row ***************************          

Oracle中查找重复记录

一.背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. 二.解决 select id from group by id having count(*) > 1 按照id分组并计数,某个id号那一组的数量超过1条则认为重复.

删除没有主键的表中的重复记录

删除没有主键的表中的重复记录 create procedure delrepeat as begin SELECT distinct *  INTO testTemp FROM test delete from test insert into test SELECT *  FROM testTemp drop table testTemp end distinct:用于查询中去除重复项 begin~end范围语句表示存储过程中作为整体执行的语句块 oracle数据库教程 delete from

删除数据表中的重复记录

数据|重复|重复记录 删除交通违章数据表中的重复记录(同一时间[haptime].车号牌[numberplate].处罚原因[reason])一.方法原理:  1.Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的, rowid确定了每条记录是在ORACLE中的哪一个数据文件.块.行上. 2.在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除. 二.实现方法:1.查询重复记录select

看实例学VFP:去除查询结果中的重复记录

在看实例学VFP:将查询结果输出为表或文本文件以及之前的几个关于select语句应用的例子中,组合框控件Combo1的数据方面的属性我们是这样设置的:RowSourceType属性值设置为"1-值",RowSource属性值设置为"部门,性别,学历",即在设计时已经将组合框控件的数据源固定了.但这种处理方式在有的情况下是不合理的,比如本文要做这样一个例子:希望在运行时可以在组合框控件里选择"部门",按"部门"来查询.我们已经知

SQL Server中删除重复记录的SQL语句

方法:  代码如下 复制代码            select distinct * into #tmp from tablename  drop table tablename  select * into tablename from #tmp drop table # tmp 常有时候遇到需要删除SQL Server中的重复记录,这里有一些常用的删除重复记录的SQL, 最常用的 T-SQL 语句:  代码如下 复制代码 DELETE FROM [dbo].[myTable] WHERE

sql 删除数据库中的重复记录方法

删除数据库中的重复记录(且仅保留一条有效记录)示例-  代码如下 复制代码 create table A ( userID int identity(1,1), userName varchar(20), userPwd varchar(20), userEmail varchar(50) ) insert into A(userName,userpwd) select 'qin','qin' union all select 'qin','qin1' union all select 'qin

dw-如何在DW/asp中让重复记录横向重复3条记录,然后换行继续直到写入完所有

问题描述 如何在DW/asp中让重复记录横向重复3条记录,然后换行继续直到写入完所有 在做一个产品展示页,数据表名称为furniture_pro里面有若干产品(至少9个以上)现在希望用DW中重复区域这个功能展示这些产品,希望每行只有三个产品,不知道在Dw中怎么实现 解决方案 写一个两重循环,排完一行插入一个分割符 解决方案二: Repeat1__index=Repeat1__index+1 Repeat1__numRows=Repeat1__numRows-1 if (Repeat1__inde