sum(nvl(a,b))とnvl(sum(a),b)の違い
857 ワード
通常、すべてのローのデータが空でない場合:
結果は同じです.
すべてのロー・データが空の場合:
結果も同じです.
データが検出されない場合:
sumは中と外で結果が違うことがわかります.sumは外で、結果は空で、sumは中で結果は1です
これはsumとnvlの異常処理が異なるためである.
データの処理中にnullではないデータがない場合、sumは「空」を返し、nvlは「データがない」を返します.
したがって、sumが外にいる場合、nvlはまず「データがない」を返し、sumは「データがない」を処理し、結果は「空」を返す.
sumが中に入っている場合、sumはまず「データなし」を処理し、戻り結果は「空」、nvlはnvlを処理し、戻り結果は1となる.
select sum(nvl(1,1)) from dual ;
select nvl(sum(1),1) from dual ;
結果は同じです.
すべてのロー・データが空の場合:
select sum(nvl(null,1)) from dual ;
select nvl(sum(null),1) from dual ;
結果も同じです.
データが検出されない場合:
select sum(nvl(1,1)) from dual where 1<>1;
select nvl(sum(1),1) from dual where 1<>1;
select sum(nvl(null,1)) from dual where 1<>1;
select nvl(sum(null),1) from dual where 1<>1;
sumは中と外で結果が違うことがわかります.sumは外で、結果は空で、sumは中で結果は1です
これはsumとnvlの異常処理が異なるためである.
データの処理中にnullではないデータがない場合、sumは「空」を返し、nvlは「データがない」を返します.
したがって、sumが外にいる場合、nvlはまず「データがない」を返し、sumは「データがない」を処理し、結果は「空」を返す.
sumが中に入っている場合、sumはまず「データなし」を処理し、戻り結果は「空」、nvlはnvlを処理し、戻り結果は1となる.