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 閱讀(1222) 評論(0)  編輯  收藏 所屬分類: SQL Dev
          主站蜘蛛池模板: 随州市| 汽车| 隆回县| 平顺县| 宁南县| 孝义市| 西和县| 牟定县| 兴和县| 凉山| 长顺县| 扎鲁特旗| 滨海县| 屯留县| 鹤山市| 景泰县| 法库县| 海淀区| 嘉荫县| 和平县| 烟台市| 宁乡县| 沅江市| 翁源县| 吉林市| 山东省| 浦江县| 镇江市| 德令哈市| 石台县| 辛集市| 芦溪县| 德安县| 临沧市| 平顶山市| 缙云县| 东至县| 昭觉县| 平潭县| 郴州市| 桃江县|