Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  302 随笔 :: 26 文章 :: 82 评论 :: 0 Trackbacks
    今天在论坛上看到一个面试题,是说有什么办法可以替代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种了。




-The End-

posted on 2008-09-05 23:09 decode360-3 阅读(1207) 评论(0)  编辑  收藏 所属分类: SQL Dev

只有注册用户登录后才能发表评论。


网站导航: