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 閱讀(1217) 評論(0)  編輯  收藏 所屬分類: SQL Dev
          主站蜘蛛池模板: 金沙县| 乌鲁木齐县| 青州市| 东光县| 霍州市| 晋中市| 日土县| 会昌县| 都匀市| 景洪市| 阜新市| 祁东县| 广元市| 天水市| 新巴尔虎右旗| 油尖旺区| 黄冈市| 保康县| 巢湖市| 金山区| 金寨县| 丰宁| 元江| 旺苍县| 山西省| 宜兰市| 汶川县| 赣州市| 土默特左旗| 岳普湖县| 曲松县| 漳州市| 乌苏市| 弋阳县| 丽江市| 通化市| 鄂托克前旗| 夏邑县| 阿坝县| 淳化县| 榆林市|