• ベストアンサー

nullと同じく空白をCountしない方法は?

お世話になります。 mysql 超初心者です。 Count( a) AS b FROM tblで aをCountするのはnull値以外で空白もCountしてしまいます。 これを空白もnull値と同じにCountしない方法はどうするのでしょうか? または空白のみをCountする書き方等あるのでしょうか? 色々調べてもググってもよくわかりませんでした。 初期値のnull値が一回書き込まれたデーターを削除すると 空白になってCount( a) でCountされて困っています。 初心者なのでなるべく具体的な回答をお待ちしています。 どうかよろしくお願いいたします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

空白ってなに?とまず突っ込まれる内容ですね キチンと型指定すれば空白はないとおもいますが create table hoge(id int not null default 0 primary key,data int null); insert into hoge value(1,1),(2,3),(3,''),(4,null),(5,null),(6,0); この場合、空白は0です そこで拡大解釈して0もカウントしないという命題だとすると 一般的にはsumを使う場合とcountをつかう場合があります (1)select sum(data is not null and data!=0) from hoge; →dataがnullじゃないかつdataが0じゃないものをカウントするのにsumをつかいます (2)select count(if(data=0,null,data) ) from hoge →dataが0だった場合nullだとみなします、この場合はcountでいけます

chikomaru
質問者

お礼

回答大変ありがとう御座います。 >空白ってなに? とご指摘頂いたのですが、mysql の初期値をnullにすると削除されたデーターには空白が残るのではないのでしょうか?うーん。。すいません。 わかりませんでした。 それはうやむやなのですが、 count(if(data=0,null,data) ) をcount(if(data='',null,data) ) としたら空白もnullとしてカウントされなくなったようで、 うまくできたようです。ifでできるとは初めて知りました! ご回答大変勉強になり、助かりました! 本当にありがとう御座います。 また何かありましたら是非よろしくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • COUNTの使い方

    MySQL4.0.26とPHPを使ってとあるシステムを構築しています。 AとBというテーブルがあって、それぞれのテーブルに登録してあるレコード数の合計を求めたいのですが、こういう場合はできるのでしょうか? SELECT count(*) FROM テーブルAでテーブルAのレコード数は求められますが、SELECT COUNT(*) FROM テーブルA、テーブルBとするとおかしな件数になってしまいます。 できれば一つのクエリで処理したいと思っているのですが。 初心者的質問ですいません。宜しくお願いします。

  • 複数JOINしているとCOUNTが正しく取得できな

    LAMP環境で開発をしています。 SQL文でCOUNTを求める際に、まとめて結果を求めようとして上手く行きません。 状況としては以下です。 テーブルdはidをkeyにa,b,c3つのテーブルとjoinしています。 id = 1の場合、テーブルa,b,cにマッチするレコードがそれぞれに4個、1個、0個あります。 ひとつひとつを SELECT COUNT(CASE WHEN a.name IS null THEN 1 ELSE null END) as a_count FROM d INNER JOIN a ON a.id = d.id WHERE d.id = 1 として結果を求めると4,1,0と出るのですが、まとめて SELECT COUNT(CASE WHEN a.name IS null THEN 1 ELSE null END) as a_count, COUNT(CASE WHEN b.name IS null THEN 1 ELSE null END) as b_count, COUNT(CASE WHEN c.name IS null THEN 1 ELSE null END) as c_count FROM d INNER JOIN a ON a.id = d.id INNER JOIN b ON b.id = d.id INNER JOIN c ON c.id = d.id WHERE d.id = 1 とすると28,5,0という値が返されます。 どのように書けば正しい4,1,0を得られるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQL: 複数テーブルのcount

    複数テーブルの総行数(count値)を取得したいのですが、下記だとテーブルA,B,Cの結果が バラバラに出力されてしまいます。 【入力条件】 mysql> select COUNT(*) AS 列ID from テーブルA      union all      select COUNT(*) AS 列ID from テーブルB      union all      select COUNT(*) AS 列ID from テーブルC; 【出力結果】       +-----+       | 列_ID |       +-----+       |  1  | ←テーブルAの合計:行数       |  2  | ←テーブルBの合計:行数       |  3  | ←テーブルCの合計:行数       +-----+ 総行数:6を一発で取得するには、どのようにしたらよろしいのでしょうか? 大変恐縮ですが、ご教授よろしくお願いいたいます。 <<MySQLのverは5,5です。

    • ベストアンサー
    • MySQL
  • SQLのcount()とgroup by

    以下のようなテーブルがあったとき、 tbl1 id | score 1 | 100 1 | 200 1 | 300 2 | 200 2 | 100 3 | 300 3 | 400 3 | 500 3 | 600 idでまとめて個数を出すとすると、 SELECT count(*) FROM tbl1 group by id とすれば count(*) 3 2 4 と結果が返ってきますが、この結果にidを足して id | count(*) 1 | 3 2 | 2 3 | 4 というようなSQLはどうやって書けばいいのでしょうか? MySQLでは、 SELECT id, count(*) FROM tbl1 group by id と書けるのですが、これは標準的なSQLではNGなそうなので、気になって質問しました。 よろしくお願いします。

  • SQLのSelect Countについて

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

  • SELECT DISTINCTの結果件数をCOUNTする方法

    SQL SERVER 2005 EXPRESS のストアドプロシージャで、 SELECT結果の件数を、変数 @count に取得したいのですが DISTINCTの引数が複数あるのが原因なのか、上手くいきません。 目的はテーブル「TBL」から、COMとUSERの組み合わせの リストを抽出し、その件数を取得する事です。 テーブル名:TBL COM  USER --------------- 001  A 002  A 003  A 001  B 002  A 003  C 「COMとUSERの組み合わせで、重複するものは取らない」のならば  SELECT DISTINCT COM,USER  FROM TBL で、下記のような結果が得られます。 COM  USER --------------- 001  A 002  A 003  A 001  B 003  C で、この結果件数である「5」を取りたいのですが DECLARE @count int  SELECT @count = COUNT(DISTINCT COM,USER)  FROM TBL print @count と打っても失敗します。 ( )の括りやCOUNTの位置をいろいろと試したが出来ませんでした。 COUNT DISTINCT(複数項目)が出来ないのならば、 どうすればこの結果の件数を取得できるでしょうか? どうかご教授授くださいませ。よろしくお願いします。

  • mysqlで連結先のテーブルをカウント

    mysql php 超初心者です。 mysqlで連結先のテーブルのカウントを取得したいと思っています。 以下のような a_tblと b_tbl があり、 a_tbl の a_index と b_tbl の ab_no を 結合して b_tbl の ab_no のカウント数を 理想結果表に表示したいと思っています。 どう書いたら b_tbl の ab_no をGROUP(?) COUNTして 理想結果表の様にbテーブルのab_noのcount数を表示できるのでしょうか? -a_tbl- a_index | a_data 1 | りんご 2 | 信号 3 | 空 4 | カラス -b_tbl- b_index | ab_no | b_data 1 |  1 | 青 2 |  1 | 赤 3 |  2 | 青 4 |  2 | 赤 5 |  2 | 黄 6 |  3 | 青 7 |  3 | 白 8 |  3 | 黒 9 |  4 | 黒 -理想結果表- a_index |a_data   | bテーブルのab_noのcount数 1 | リンゴ   | 2 色 2 | 信号   | 3 色 3 | 空   | 3 色 4 | カラス  | 1 色 私が見よう見まねで考えた式ですが、やはりこれでは表に2しか出ませんでした。 $sql = "SELECT Count(*) AS cnt FROM b_tbl LEFT JOIN a_tbl ON b_tbl.ab_no = a_tbl.a_index GROUP BY b_tbl.ab_no"; 質問の仕方もよくわからないのでわかりにくいかも知れませんが どうかご教授の程よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • AccessでNULLのデータを判断する方法

    ご指導、宜しくお願い致します。 Accessを経由してPostgresのデータベースへ データをインポートしていきたいのですが、 Accessから抽出したデータが空白か空白ではないのかを 判断させたいのですが、以下のように記述しているのですが、正しく判断されないようです。 どのように記述すればよいのでしょうか??? ---------------------------------------- SQL="SELECT 単価,フラグ FROM AAA_TBL" Set RS = Conn.Execute(SQL) IF RS(0) = NULL THEN  RESPONSE.WRITE "空白" ELSE  RESPONSE.WRITE "単価" END IF IF RS(1) = NULL THEN  RESPONSE.WRITE "空白" ELSE  RESPONSE.WRITE "フラグ" END IF ---------------------------------------- Accessdb:AAA_TBL フィールド名/データ型 単価/INT4 フラグ/varchar

  • LOAD DATA INFILE で最初のカラム以外がロードされないで NULL になってしまう

    お世話になります。MySQL勉強中の初心者です。 環境: MySQL5.1 OSX10.4 ターミナル (Winでいう「cmdプロンプト」です) 問題: LOAD DATA INFILE でコマンドは通るのですが、select*from でチェックすると第一カラム(左端)だけは正常にロードされるんですが、残りのカラムがすべて NULL となってしまって切ないです。 ロードしたデータの例: 1011 jan c001 a01 1012 jan c001 a01 1013 jan c002 a03 構造としては、こんな感じです。↓ 文字列[tab]文字列[tab]文字列[tab]文字列[空白スペース?] 現在の結果: | 1011 | NULL | NULL | NULL | | 1012 | NULL | NULL | NULL | | 1013 | NULL | NULL | NULL | 今は小規模なデータだけなのでやむなく手打ちでガコガコ入れてますが、原因を解明したいと思います。 どなたかアドバイス頂けると幸いです。宜しくお願いします。orz れざ

    • ベストアンサー
    • MySQL
  • NULL値を含むソート

    MySQL4.0.20を使っています。 以下のようなデータをソートすると NULLが先に表示されます。 これをNULLを最後にして、数値のソートをかけたいです。何か解決策はありますか?2回に分ける方法しかないのでしょうか? nullと非null ◆元データ A --- 5 NULL 2 NULL 3 1 select A from xxx order by A asc; ●望まない結果 A --- NULL NULL 1 2 3 5 ●望む結果 A --- 1 2 3 5 NULL NULL ※話は変わりますが、4.1で日本語EUCの文字化けバグは直っているのでしょうか?

    • ベストアンサー
    • MySQL