Decode360's Blog

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          <2008年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          公告

          常用鏈接

          隨筆分類(299)

          隨筆檔案(299)

          文章分類(26)

          新聞分類(24)

          收藏夾(5)

          Blog列表

          IT網站

          My Link

          最新隨筆

          最新評論

          ??? 今天在論壇上看到一個面試題,是說有什么辦法可以替代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 閱讀(1220) 評論(0)  編輯  收藏 所屬分類: SQL Dev
          主站蜘蛛池模板: 绥滨县| 昭通市| 大石桥市| 军事| 金门县| 焉耆| 准格尔旗| 岗巴县| 曲沃县| 博兴县| 阿坝| 大田县| 萨嘎县| 侯马市| 石楼县| 嘉兴市| 古田县| 闽清县| 海阳市| 高唐县| 平和县| 嘉祥县| 双桥区| 吴旗县| 绵阳市| 乐清市| 石柱| 左贡县| 安达市| 堆龙德庆县| 长葛市| 顺平县| 泾阳县| 合肥市| 天水市| 东平县| 莎车县| 濉溪县| 仁化县| 黔西县| 保定市|