日期:2014-05-16  浏览次数:20507 次

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 ;