`
Eric.Yan
  • 浏览: 323366 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle——distinct的用法

阅读更多
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。

下面先来看看例子:

table表

字段1     字段2    id        name    1           a    2           b    3           c    4           c    5           b

库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。

比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。

select distinct name from table 得到的结果是:

 

---------- 

name    a    b    c

好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:

select distinct name, id from table

结果会是:

---------- 

id name    1 a    2 b    3 c    4 c    5 b

 

distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。

我们再改改查询语句:

 

select id, distinct name from table

很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。

------------------------------------------------------------------------------------------------------------

 

下面方法也不可行:

select *, count(distinct name) from table group by name

结果:

 

ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"

 

依然报错,

 

group by 必须放在 order by 和 limit之前,不然会报错

 

------------------------------------------------------------------------------------------------------------

 

偶认为这样可行

select max(id), name from table group by name;

 

结果:

id name

1  a

2  b

4  c

5  d

 

参考资料:

http://www.cnblogs.com/dogxuefeng/archive/2012/06/21/2557700.html

http://stevenfeng.iteye.com/blog/841793

 

分享到:
评论
1 楼 DreamRoute 2014-07-23  
把select max(id), name from table group by name;改成select max(rowid), name from table group by name;或许更好。

相关推荐

    李兴华——Oracle数据库笔记(全)

    根据提供的信息,我们可以总结出...通过以上知识点的介绍,可以了解到Oracle数据库的基本使用方法,包括如何使用SQLPlus工具执行SQL语句、如何进行简单的数据查询等。这些内容对于初学者来说是非常实用的基础知识。

    oracle ebs开发文档

    - **随机取前10条不同的记录**:通过组合使用 ROWNUM 和 SELECT DISTINCT 来实现。 - **TRUNC函数**:用于去除小数部分。 - **修改表的一些常用语法**:如 ADD、MODIFY 和 DROP 等,用于表结构的修改。 - **舍入函数...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    Oracle_Database_11g完全参考手册.part2/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    Oracle_Database_11g完全参考手册.part3/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...

    Oracle OCP认证课程大纲

    - **排序与去重**:介绍 ORDER BY 和 DISTINCT 关键字的使用方法。 - **单行函数**:通常用于在结果集中对单个值进行操作,例如日期函数、字符串函数等。 - **子查询**:包括关联子查询和非关联子查询的区别,以及...

    oracle教学4笔记

    ### Oracle 教学知识点详解 —— 数据的基本查询与常用函数 #### 一、基本查询语法与原理 **数据查询的原理:** 数据查询是数据库中最基础的操作之一,它通过指定要查询的列以及设定的查询条件,从原始数据表中...

    Oracle SQL优化

    - **方法**: 使用Oracle提供的内部函数,如NVL、DECODE等,来简化逻辑。 ##### 3.17 使用表的别名(Alias) - **优势**: 表别名可以提高代码可读性和维护性。 ##### 3.18 用EXISTS替代IN - **优势**: EXISTS通常比...

    Oracle sql 性能优化调整

    1. **选择适合的Oracle优化器**:Oracle数据库提供了两种主要的优化器——基于成本的优化器(CBO)和基于规则的优化器(RBO)。CBO根据统计信息和成本估算来选择执行计划,而RBO则按照预定义的规则执行。通常,CBO更...

    Oracle数据库Sql语句详解大全.pdf

    ### Oracle数据库SQL语句详解——SELECT查询与条件查询 #### 第一章 SELECT查询 ##### 1.1 基本语法 SELECT语句是Oracle数据库中最常用的查询数据的方法之一,其基本语法结构如下: ```sql SELECT <列名> FROM ...

    Oracle日常维护中管理用户以及重做日志文件的方法

    select distinct object_type from dba_objects;  模式对象,schema —-> user.objects(某个用户下的某个对象) 在创建对象和访问对象前,首先创建对象的拥有者——用户  所有的对象在用户下 用户有相关的属性...

    超越linq--LINQ最佳实践,覆盖所有实例

    在“超越LINQ——LINQ最佳实践”这一主题中,我们将深入探讨LINQ的高级用法和技术,确保你能够充分利用这一强大的工具。 1. **查询表达式语法** LINQ的核心是查询表达式,它使用类似于SQL的语法进行数据查询。例如...

    程序员的SQL金典(完整版).pdf

    - 使用 `DISTINCT` 关键字去除重复记录。 **4.6 计算字段** - **常量字段** - 直接在 `SELECT` 语句中计算常量值。 - **字段间的计算** - 对字段进行加减乘除等运算。 - **数据处理函数** - 使用内置函数如 ...

Global site tag (gtag.js) - Google Analytics