??? 今天在論壇上看到一個(gè)面試題,是說(shuō)有什么辦法可以替代distinct,得到同樣的結(jié)果。
??? 答案都被大家說(shuō)的差不多了,發(fā)現(xiàn)挺有意思的,就記錄一下:
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:
這個(gè)比較無(wú)恥,基本屬于說(shuō)了跟沒(méi)說(shuō)一樣,但確實(shí)是對(duì)的
SQL> select unique num from t1;
??????????????????????????????????? NUM
---------------------------------------
????????????????????????????????????? 1
????????????????????????????????????? 6
????????????????????????????????????? 8
????????????????????????????????????? 7
????????????????????????????????????? 9
5 rows selected
二、用group by來(lái)做:
這個(gè)應(yīng)該是出題者的本意
SQL> select num from t1 group by num;
??????????????????????????????????? NUM
---------------------------------------
????????????????????????????????????? 1
????????????????????????????????????? 6
????????????????????????????????????? 8
????????????????????????????????????? 7
????????????????????????????????????? 9
5 rows selected
三、用union和minus:
因?yàn)閡nion和minus默認(rèn)都是先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
一個(gè)是minus一個(gè)沒(méi)有的項(xiàng),一個(gè)是union它本身。
關(guān)于其他的方法,要是再用over之類(lèi)的就沒(méi)有什么太大的意義了,差不多就這3種了。
-The End-