紙飛機(jī)

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            22 隨筆 :: 28 文章 :: 30 評(píng)論 :: 0 Trackbacks

          問題:對(duì)某列進(jìn)行聚集運(yùn)算,但該列的值可為空,由于函數(shù)會(huì)忽略NULL值,能否保持聚集運(yùn)算的準(zhǔn)確性令人擔(dān)憂。例如,想要求DEPTNO 30中職員的平均傭金,但有些職員不掙傭金(這些職員的COMM值為NULL)。由于聚集運(yùn)算會(huì)忽略NULL,因此輸出結(jié)果的準(zhǔn)確性沒有保障。在進(jìn)行聚集運(yùn)算時(shí)有時(shí)可能需要以某種方式將NULL值包括進(jìn)來。

          解決方案

          使用COALESCE函數(shù)把NULL轉(zhuǎn)換為0,這樣在進(jìn)行聚集時(shí)可以把它們包括進(jìn)來:

          1   select avg(coalesce(comm,0)) as avg_comm

          2     from emp

          3    where deptno=30

          討論

          請(qǐng)務(wù)必記住,在使用聚集函數(shù)時(shí)會(huì)忽略NULL。不使用COALESCE函數(shù)時(shí)該解決方案的輸出如下:

          select avg(comm)

             from emp

          where deptno=30

          AVG(COMM)

          ---------

                 550

          該查詢表明,DEPTNO 30的平均傭金是550,快速檢查這些行如下:

          select ename, comm

             from emp

          where deptno=30

          order by comm desc

          ENAME            COMM

          ---------- ---------

          BLAKE

          JAMES

          MARTIN           1400

          WARD              500

          ALLEN             300

          TURNER              0

          這表明六個(gè)職員中只有四個(gè)職員掙得傭金。DEPTNO 30中所有傭金的總和是2200,其平均值應(yīng)該是2200/6,而不是2200/4。如果不用COALESCE函數(shù),回答的是問題“DEPTNO 30中掙得傭金的職員的平均傭金是多少?”,而不是“DEPTNO 30中所有職員的平均傭金是多少?”。使用聚集時(shí)記住要相應(yīng)處理NULL值。

          posted on 2008-05-14 21:47 紙飛機(jī) 閱讀(363) 評(píng)論(0)  編輯  收藏 所屬分類: Database
          主站蜘蛛池模板: 文山县| 甘孜县| 固始县| 布拖县| 黎城县| 武宣县| 丹阳市| 靖西县| 永仁县| 阜城县| 海城市| 安丘市| 河南省| 新邵县| 钟祥市| 治县。| 谷城县| 柘城县| 枣阳市| 泗阳县| 桐庐县| 额尔古纳市| 剑河县| 靖边县| 安远县| 玛多县| 增城市| 霍州市| 秦安县| 衢州市| 宜兰市| 同江市| 遵义市| 缙云县| 宜州市| 德昌县| 会泽县| 达州市| 顺义区| 本溪市| 金华市|