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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值