• ベストアンサー

select文のサマリー

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

  • Oracle
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • GoF
  • ベストアンサー率37% (34/91)
回答No.1

count()は常に0以上の数値が戻ります。 sum()は該当件数が0のとき、該当しても内容がすべてNULLの場合 NULLになります。 それ以外の場合は、NULLを除外した数値の合計値が戻ります。

shangzi
質問者

補足

 ありがとうございます。とても助けられました。 えと、内容が全てnullでなくて、該当するものがなかった場合もやっぱりnullになるのでしょうか?・・・補足し忘れてまして・・・

関連するQ&A

  • SQLのSelect Countについて

    たびたびお世話になります。 以下のSQLを実行したらエラーになりましたが原因がわかりません。 select count(A), A from TableA where A > 0 and B is not null; 同時に該当するデータ件数とその項目を取得したかったのですが、なぜ上記のSQLがエラーになるのかわかりません。 教えてください、お願いします_(._.)_

  • 【初歩】項目別の合計件数をSQL一文で取得できますか。

    MySQL 5.0.24a 氏名(myname)、組(kumi;1~6組がある)の2カラムからなる マイテーブルがあるとして、次のように組ごとの登録人数を 集計するSELECT文をご教示下さい。 ----------- | 1 | 23名 | ------------ | 2 | 25名 | ------------ | 3 | 25名 | ------------ | 4 | 24名 | ------------ | 5 | 27名 | ------------ | 6 | 22名 | ------------ select count(*) as cnt1 where kumi = '1'; select count(*) as cnt2 where kumi = '2'; select count(*) as cnt3 where kumi = '3'; select count(*) as cnt4 where kumi = '4'; select count(*) as cnt5 where kumi = '5'; select count(*) as cnt6 where kumi = '6'; と、組(kumi)ごとのSQL文を6回発行しなければならないのでしょうか?

    • ベストアンサー
    • MySQL
  • SELECT * FROM tbl WHERE a = ?;

    SELECT * FROM tbl WHERE a = ?; 上記のSQL文で、?の部分がnullだとWHERE条件を無い状態に(SELECT * FROM tbl) のようにするにはどうすればいいでしょうか?

  • SQL count 別名を条件に使用

    いつもお世話になっております。 標題についてご教授頂きたく質問させて頂きました。 [SQL} select A, B, count(*) as cnt from product where A=1 and cnt > 2 group by A order by cnt desc とこのようにSQLを記述して実行したのですが、 cnt>2でエラーが出ます。 order by には count の別名を使用できるのですが、 where句やHAVINGでは使えません。 この場合 cont(*)>2 またはcount(項目名)>2 としなければならないのでしょうか

  • 文字例の比較について WHERE句

    文字例の比較について、教えてください。 DELETE_FLAGという項目には、文字列の"1"、もしくはNULLが入っています。 セレクト文でDELETE_FLAGが"1"以外のものを抽出したいのですが、うまくいきません。 以下のSQL文を実行した際に、結果として5件ヒットしてほしいのですが、なぜか0件となってしまいます。 select count(product_id) from hpk_atoz_list_view where delete_flag != '1'; 原因わかりますでしょうか? よろしくお願いいたします。 ============================================================================ SQL> select delete_flag, product_id from product_list_view; DELETE_FLAG product_ID ---------------------------------   0002 1 1003   0002 1 1003   0002 1 1003   0002   0002 8行が選択されました。 SQL> SQL> select count(product_id) from product_list_view where delete_flag != '1'; COUNT(product_id) ---------- 0 SQL> SQL> select count(product_id) from product_list_view where delete_flag = '1'; COUNT(product_id) ---------- 3 SQL> SQL> select count(product_id) from product_list_view where delete_flag is not null; COUNT(product_id) ---------- 3 SQL> SQL> select count(product_id) from product_list_view where delete_flag is null; COUNT(product_id) ---------- 5 SQL> =====以上=====

  • 特定のフィールドにデータが入ってる件数を調べたい

    ageというフィールドにデータが入っている件数を調べたいのですが、どのようなsql文を書けばいいでしょうか。 ageフィールドのNULLは「いいえ」、デフォルト値は「空欄」です。 $sql = "SELECT COUNT(*) AS cnt FROM table where 'age' is not null ;"; この文ではうまくいきませんでした。ageフィールドのデフォルト値をNULLにすればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • Select文1 マイナス Select文2

    テーブルA ユーザーID,地名,県名,評価 テーブルB ユーザーID,県名,制覇flag のような二つのテーブルがあると仮定してSelect文1、 "select 県名,count(地名) from テーブルA where ユーザーID=1 group by 県名 order by count(地名);" の結果が 県名,count(地名) 北海道,30 東京,22 京都,15 名古屋,10 鳥取,9 沖縄,8 であるとし、 Select文2、 "select 県名 from テーブルB where usrid=1 and 制覇flag='true'" の結果が、 県名 北海道 東京 とします。 このSelect文1の結果から、Select文2の結果を引いて 県名,count(地名) 京都,15 名古屋,10 鳥取,9 沖縄,8 の結果を得るにはどうすればよいでしょうか? Mysqlのバージョンは5.0.21です。

    • ベストアンサー
    • MySQL
  • Select文とデッドロックについて

    現在のような処理をしています。 SQL Server2008 R2 Expless プログラム1  select count(*) from TABLE_A プログラム2 BeginTrance SERIALIZABLE  select count(*) from TABLE_A Update TABLE_B set F1=123 Where P1=1 Commit ※ここで P1はTABLE_Bのプライマリキーとします。 この2つのプログラムを同時に実行している時に、プログラム1のSELECT文でデッドロックが発生した との連絡ありました。 プログラム2でもエラーが発生しているのかもしれませんが、現状調査不可能為不明です。 いろいろデッドロック、ロックヒントなどいろいろ調べてみた結果、なんとなく発生するかも?とは思われますが、このような場合、本当にデッドロックが発生するのでしょうか? また、発生する場合には、何と何がデッドロックになっているのでしょうか? (発生するはずがないとなると調査する視点を変えてみます。) よろしくお願いします。

  • PostgresのSQL文

    誕生日を取得するSQLとして以下の文を発行し、 -- 誕生日の並び替え(多い順) select trunc((current_date - to_date(birth,'YYYY/MM/DD'))/365) as age, count(*) as cnt from tb_custom_user where birth is not null group by age order by cnt desc; 次の結果を得ました。 age | cnt -----+----- 25 | 2 26 | 1 28 | 1 (3 rows) cntが最大数のときのageだけを取得したい場合、 上記のSQLをどう変更すればいいのでしょうか?

  • 特定のフィールドにデータが入っている件数を表示したい

    ageというフィールドにデータが入っているものだけを抽出してその件数を表示したいのですが、どのようなsql文を書けばいいでしょうか? ageフィールドは、種別「varchar(255)」、NULL「いいえ」、デフォルト値「空欄」になっています。 $sql = "SELECT COUNT(*) AS cnt FROM table where 'age' is not null;"; これではうまくいきませんでした。ageのデフォルト値をNULLにすれば解決するのでしょうか?

    • ベストアンサー
    • MySQL