• ベストアンサー

SQLでSUMなどの関数でデータが無い時に0を返したい。

SQLでSUMなどの関数でデータが無い時に0を返したい。 (例) SELECT SUM(項目) FROM テーブル WHERE 条件 ここで、条件に一致するデータが1件も無かった時ですが、 何かNULLのような物が1件返ってきているようです。 この条件に一致する物が無かった時に、 0を返したいのですが、可能でしょうか? よろしくお願いします。

  • Oracle
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • moousi
  • ベストアンサー率70% (21/30)
回答No.2

NULLが入りうるカラムはNVLで括った方が安全です。 SELECT SUM(NVL(項目,0)) from テーブル WHERE 条件 SUMの場合は、変わりないですが、AVGだと結果が違ったりします。 件名を見て、SUM以外の関数についても含むようだったので一応。

evaag777
質問者

お礼

ご回答ありがとうございます。解決する事ができました。 この方法で対応しました。

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

SELECT CASE SUM(項目) WHEN NULL THEN 0 ELSE SUM(項目) END FROM テーブル WHERE 条件

evaag777
質問者

お礼

ご回答ありがとうございます。解決する事ができました。

関連するQ&A

  • プロシージャーで(SELECT句とSUM関数)でデータがない状態の時

    プロシージャーで(SELECT句とSUM関数)でデータがない状態の時 例 テーブル名:表1 *************** * 個数* 連番 * *************** *  10 * 5  * *************** *  10 * 6  * *************** このようなテーブルの時で以下の処理をしたとき「何かをする;」を実行したいのですが実行できませんどうすればいいでしょうか? 変数が何もない状態なのでNULLで判定しようと思うのですが、うまくいきませんよろしくお願いいたします。 ************************************************** 変数 A NUMBER型を用意する SELECT SUM(個数) INTO A FROM 表1 WHERE 連番 < 4 IF A = NULL THEN 何かをする; END IF; **************************************************

  • SQL

    SQLの初心者です。 次のようなテーブルがあるとします。 項目:A , B , C , D このテーブル合計を求めたいのです。 条件は、 同一テーブルでB=10の時のAの合計とD=10の時のCの合計の合計です。 B=10の時のAの合計は「sql sum(A) from テーブル where B=10」となります。 D=10の時のCの合計は「sql sum(C) from テーブル where D=10」となります。 この2つの合計を求めたいのです。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • SQLのWHERE句を条件によって追加したい

    SQLのWHERE句にパラメータで渡された値がnullでない場合は条件に 含めるようにしたいのですが、書き方が分かりません。 CASEを使って書いてもエラーになってしまいます。 SELECT 項目1 ,項目2 FROM テーブル WHERE 条件1 = パラメータ1 AND 条件2 = パラメータ2 -- パラメータ3がnullでない場合は下記条件を付けたい AND 条件3 = パラメータ3 使っているのはpostgresqlです。 よろしくお願いします。

  • SQL文の作り方、SUM関数を2回使いたいです。

    こんばんわ、SQL分の勉強をしています。以下のSQL文を見てください。 select sum(dat1) from daityou,book (SELECT book.author,book.bookname,book.money*daityou.cnt AS dat1 FROM book, daityou where book.bookname=daityou.bookname); 内容は、著者と本のタイトルと本ごとの売り上げの一覧表を作成し、さらに著者毎に売り上げを集計したいのですが、エラーになります。 どのような文を作成すればいいのでしょうか? SUM関数を2回使わなくてもいいです。 よろしくお願いします。

  • 【至急】SQLの結合について教えてください。

    select * from A where ab = '1' and cd = '2' select ef from B where ab = '1' and cd = '2' and ef = '3' 至急質問させてください。 上記SQLを結合したいです。(Oracleです) 取得したいデータはAのテーブルの全項目で、 取得条件として、Bのテーブルの項目ef = '3' だったらという条件を加えたいです。 キー項目は両テーブルとも同じ(ab, cd)です。 どのようなSQLがスマートでしょうか。。 無知で申し訳ございませんが、ご教授いただけますと幸いです。 よろしくお願いいたします。

  • 年齢分布テーブルの再集計SQL

    テーブルA 年齢,人数 20,15 21,11 22,26 .... 30,5 31,88 ... 60,5 上記テーブルAからのSQLで下記のデータが欲しいと思っております。 【欲しい結果】 年齢範囲,人数 20~24,50 25~29,33 30~34,199 ... ただし、 select '20~24'as 年齢範囲,count(*)as 人数 from テーブルA where 条件1 union select '25~29'as 年齢範囲,count(*)as 人数 from テーブルA where 条件2 union select '30~34'as 年齢範囲,count(*)as 人数 from テーブルA where 条件3 ... というSQLは使いたくないです。(テーブルAの記述が長めなので、同じものを複数記述したくないのです) また結果が 項目名:20~24,25~29,30~34,... レコード:50,33,199,... というのも遠慮したいです。 CASE文やsum、groupを使えば、できそうな気がするのですが、、、 ご教授お願い致します。

  • 副問い合わせでのNULLの抽出方法

    SQLについての質問です。 副問い合わせを使用したとき、NULLのデータも含めて抽出したいの ですが、どうもうまくいきません。 やりたいことを説明すると、まず以下の構造のテーブルがあります テーブル    コード 金額  -------------- 01  |100   01  |110   02  |090   02  |080   03  |200   04  |100   04  |150   05  |400   09  |350   null |100   null |200   集約後データ コード -------- 01  |<--- 1件目 02  |<--- 2件目 03  |<--- 3件目 04  |<--- 4件目 05  |<--- 5件目 09  |<--- 6件目 null |<--- 7件目 まず、テーブルをコードで集約します。集約された結果のデータで上位○件と いう制御をかけたい為、ROWNUMを使用しています。 ただ、実際にほしいデータは集約する前のデータの為、一度集約とROWNUMを使って 絞りこんだデータを副問い合わせしています。 但し、このときNULLが入ったコードも取得する必要があります。 現在のSQLはこんな感じです。 SELECT コード、SUM(金額) FROM テーブル WHERE コード IN ( SELECT コード FROM テーブル WHERE ROWNUM <= 10 GROUP BY コード ) GROUP BY コード このSQLだと、NULLが省かれてしまうため上位6件までしか抽出できません。 実際、NULLを含んだデータを副問い合わせで取得することは可能でしょうか? データベースはオラクル9iです。 宜しくお願いします。

  • sqlについて

    SQLについて質問です。 VBからMDBにSQLでデータの参照をしたいのですが ("select * from abc where No = " & No & " ;") テーブル内の数ある項目の中で一つだけまたは複数除いて参照する場合のSQL文を教えてください。 項目が60個ほどありますので一つ一つ指定していくとすごく長いSQLになってしまいそうですのでお知恵をお貸しください><

  • MySQLのSUM関数について

    いつもお世話になっております。 宜しくお願い致します。 MySQLのSUM関数についてお聞きしたいのですが、データベースから特定の条件のカラムだけ合計をするという事はできないのでしょうか? たとえば・・・ hoge_table +------+-------+-------+ | user | data1 | data2 | +------+-------+-------+ | hoge | 1 | 0 | | hoge | 2 | 0 | | hoge | 1 | 1 | | hoge | 2 | 1 | +------+-------+-------+ というデータベースがあり、ここからdata1が1の場合の合計を集計するにはどうすれば良いのでしょうか? さらに、data1が2で、data2が0の場合といった複数の条件を指定して合計を出したいのですが、 方法が思いつきません。 select *, if(data1 = '1',sum('1'),'') as direct_dispatch_1 from hoge_table group by user とやってみたのですが、結果は4になってしまいました。 何か良い方法はございませんでしょうか?

    • ベストアンサー
    • MySQL
  • select文のサマリー

     select sum(A.列名1)  --列名1の型はnumber  from テーブル名 A where A.列名2 = 定数  and A.列名3 <> 定数; と言った簡単なSQLなのですが、 結果としてnull値が返ることはあるでしょうか? count では必ず数値が返ると思うのですが・・・sumの場合もヒットする値が1件もなかった場合0が返るのでしょうか?  また、sum()またはcnt()でnullが返されるような条件があるとしたらどんな時でしょうか?