ORACLE GROUP BY 如何去重 小汇
来源:互联网 发布:淘宝有3ds正版么 编辑:程序博客网 时间:2024/04/29 09:16
2010年12月17日14:30:02
例如有如下表结构和值
table
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
5 a 男
6 b 男
方案一:distinct
select distinct name from table
得到结果:
name
a
b
c
d
实现效果,那如果要同时打开其它记录呢?再试试
select distinct name,id from table
测试没什么效果,查下得知,这样实际是要name和id字段都重复才被筛选。继续查找可得如下方法:
方案二:group by
select *, count(distinct name) from table group by name
Oracle下测试失败,据说MYSQL下通过,不管,继续思考....
翻翻书,试试
select min(fid),name,sex from table group by name (此处从别处网摘,个人认为该是这样:GROUP BY name,sex)
成功,现实如下结果:
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
继续思考,如果要打开所有记录,不指定字段用(*),貌似这方法就不行了!
select * from table where fid in(Select min(fid) FROM table group by name)
测试成功
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
方案三:
所有某字段不重复的记录
select * from table where name in(select name from table group by name having count(name)=1)
得到如下结果:
fid name sex
1 a 男
2 b 男
5 a 男
6 b 男
再多的字段都全部现实。哎,原来如此简单!回顾网上方法distinct,Inner Join等等,麻烦,而且有很大局限性.
总结如下:
select distinct name from table查询不重复记录的单个字段
select * from table where fid in(Select min(fid) FROM table group by name)查询不重复记录的所有字段值
select * from table where name in(select name from table group by name having count(name)=1)查询不重复(可设定重复数为任意次数)的所有记录
************************************************************************************************
方案四:是我自己用的,大数据量的时候 in 的执行效果,让人望而却步,遂继续找。
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,distinct使用的是二重循环来去重的,如果数据量非常大的时候,会导致性能急剧下降。
效率很低 。
select distinct name from tbl1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from tbl1 可以取多个字段,但只能消除这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 MIN(D.ID)ID ,D.NAME,D.DEPT FROM S_EMP D GROUP BY D.NAME,D.DEPT ORDER BY ID ASC;
另外一种写法:
SELECT C.NAME ,C.DEPT ,MAX(ROWID) SYS_ID FROM S_EMP C GROUP BY C.NAME,C.DEPT ;
- ORACLE GROUP BY 如何去重 小汇
- mysql去重distinct和group by
- ThinkPHP去重 distinct和group by
- (MySql)distinct、group by去重
- 关于distinct 和group by的去重逻辑浅析
- android 开发,MediaStore去重查询,使用Group By
- mysql 去重方法distinct 与 group by 性能比较
- 关于distinct 和group by的去重逻辑浅析
- mysql group by 用法解析(详细) + mysql distinct 去重
- 关于distinct 和group by的去重逻辑浅析
- 关于distinct 和group by的去重逻辑浅析
- mysql distinct 去重、group by 用法解析(详细)
- 数据库查询去重group by和distinct的理解
- 关于distinct 和group by的去重逻辑浅析
- distinct left out join group by order by之去重
- oracle group by ,count,sum 函数 日常使用小知识
- mysql distinct 去重 和 mysql group by 用法解析(详细)
- hive使用技巧(三)——巧用group by实现去重统计
- 对web.config进行新增修改删除读取操作
- android真机调试方法
- WordPress初级教程-23: 更换Wordpress主题后的注意事项
- 关于js加载iframe出现空白问题的解决方案
- 有关#ifndef #define #endif
- ORACLE GROUP BY 如何去重 小汇
- 前台判断
- FLASH调整动态文本行距
- Invoke 和 BeginInvoke
- linux终端里CTRL-Z和CTRL-C的区别
- JDBC与各种数据库的连接方式
- [经验总结]在ATL中通过GIT让工作线程访问连接点
- tokyo安装过程出现的小问题
- QT 无边框窗体最大化 遮挡windows任务栏的问题