`
哥只是个传说
  • 浏览: 20059 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Distinct函数的替代方法

阅读更多

   今天在论坛上看到一个面试题,是说有什么办法可以替代distinct,得到同样的结果。答案都被大家说的差不多了,发现挺有意思的,就记录一下:

SQL> select num from t1;


       NUM
----------
         6
         6
         7
         8
         9
         1
         1
         1
       1
        1
         1
         1
        1
         1
        1

15 rows selected
 
SQL> select distinct num from t1;

       NUM
----------
         1
         6
         8
        7
        9

5 rows selected



一、用unique代替distinct:

这个比较无耻,基本属于说了跟没说一样,但确实是对的

SQL> select unique num from t1;

       NUM
----------
         1
         6
         8
        7
        9

5 rows selected


二、用group by来做:

这个应该是出题者的本意

SQL> select num from t1 group by num;

       NUM
----------
         1
         6
         8
         7
         9

5 rows selected


三、用union和minus:

因为union和minus默认都是先distinct然后再做聚集,所以可以这样做:

SQL> select num from t1 minus select 999 from dual;

       NUM
----------
         1
         6
         7
         8
         9

5 rows selected
 

SQL> select num from t1 union select num from t1 ;


       NUM
----------
         1
         6
         7
         8
         9

5 rows selected

一个是minus一个没有的项,一个是union它本身。



关于其他的方法,要是再用over之类的就没有什么太大的意义了,差不多就这3种了。
 
原文地址:http://www.blogjava.net/decode360/archive/2009/06/22/283563.html

分享到:
评论

相关推荐

    count_distinct:在PostgreSQL中扩展以COUNT(DISTINCT ...)聚合的替代方法

    此扩展提供了COUNT(DISTINCT ...)的替代方法,该方法对于大量数据通常会以排序和不良性能而告终。 职能 有两个多态聚合函数,用于处理按值传递的固定长度数据类型(即,在64位计算机上最多为8B值): count_...

    PLSQL程序优化和性能分析方法

    2.4.7 用EXISTS替换DISTINCT 10 2.4.8 减少对表的查询 10 2.4.9 避免循环(游标)里面嵌查询 11 2.4.10 尽量用union all替换union 13 2.4.11 使用DECODE函数来减少处理时间 13 2.4.12 group by优化 13 2.4.13 尽量...

    Oracle数据库Sql性能调优

    1.22 用EXISTS替换DISTINCT 13 1.23 识别’低效执行’的SQL语句 14 1.24 用索引提高效率 14 1.25 索引的操作 15 1.26 多个平等的索引 16 1.27 等式比较和范围比较 17 1.28 不明确的索引等级 17 1.29 强制索引失效 18...

    oracle的sql优化

    oracle的sql优化方法 1.全表扫描和索引扫描  大数据量表尽量要避免全表扫描,全部扫描会按顺序每条记录扫描,对于>100万数据表影响很大。  Oracle中通过RowID访问数据是最快的方式  对字段进行函数转换,或者前...

    关系型数据库性能体系设计和效率提升.docx

    7.11用EXISTS替换DISTINCT 24 7.12 尽量用union all替换union 24 7.13 使用DECODE函数来减少处理时间 24 7.14 尽量避免用order by 25 7.15 用Where子句替换HAVING子句 25 7.16 减少多表关联 25 7.17 避免重复访问 26...

    Pewlett_Hackard_Analysis

    Pewlett_Hackard_Analysis 鲍勃·西米内拉(Bob Ciminera)概述Pewlett Hackard是一家大型公司,... 通过使用Distinct sql函数选择每个雇员的最新职务,可以消除上述1.中重复的雇员和职务。 唯一的员工头衔列表已分组并

    2009达内SQL学习笔记

    3、对列起别名:有直接起别名,加AS起别名,用双引号起别名等三种方法 (单引号,引起字符串;双引号,引起别名。起别名有符号,或者区分大小写时,必须用双引号) 多表查询时,可给表起别名。(给列起别名,列<空格...

    高性能MySQL(第3版).part2

    2.3基准测试方法40 2.3.1设计和规划基准测试41 2.3.2基准测试应该运行多长时间42 2.3.3获取系统性能和状态43 2.3.4获得准确的测试结果44 2.3.5运行基准测试并分析结果46 2.3.6绘图的重要性47 2.4基准测试工具...

    精髓Oralcle讲课笔记

    --------------------------------------------------having函数对于group by函数的过滤 不能用where-------------------------------------- 58、select deptno, avg(sal) from emp group by deptno having avg...

    SQLServer2005考试题及答案

    4、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1___),使用关键字(2___)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3___),如果在SELECT语句中使用聚合函数时,...

    Access 2000数据库系统设计(PDF)---018

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---011

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---020

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---001

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---002

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---003

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---009

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---012

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---015

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

Global site tag (gtag.js) - Google Analytics