• ベストアンサー

COUNTの取得方法(?)について質問があります。

COUNTの取得方法(?)について質問があります。 現在次のSQL文を投げると SELECT    ITEM   ,COUNT(ITEM) FROM   ITEM_MASTER WHERE   ITEM IN ('000', '100', '200', '300', '400') GROUP BY   ITEM ORDER BY   ITEM ; このような結果が返ってきます。 ITEM  COUNT(ITEM) ------ ----------- 100       9 200       2 300       1 ITEMの値が000と400の件数は0件なのですが、0件の場合には、 次のように0と表示したい場合はどのようにしたら良いのでしょうか? ITEM  COUNT(ITEM) ------ ----------- 000       0 <--ここ 100       9 200       2 300       1 400       0 <--ここ よろしくお願いします。

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

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

  • ベストアンサー
回答No.2

対象データが存在しないモノは抽出のしようがありません。 どこにも存在しないのであれば、便宜上作るしかありません。 selec ITEM,COUNT(*) from ITEM_MASTER, ( select '000' as KEY from dual union all select '100' as KEY from dual union all select '200' as KEY from dual union all select '300' as KEY from dual union all select '400' as KEY from dual ) M where ITEM=M.KEY group by ITEM order by ITEM ; 抽出条件も兼ねたインラインビューとしています。

taru73
質問者

お礼

ありがとうございました。解決しました。 回答頂いたままだと結果は変わりませんでしたが、 次のように修正した所、思い通りの結果が得られ ました。 SELECT    M.ITEM   ,COUNT(I.ITEM) FROM   (   SELECT '0000' AS ITEM FROM DUAL UNION ALL   SELECT '1000' AS ITEM FROM DUAL UNION ALL   SELECT '2000' AS ITEM FROM DUAL UNION ALL   SELECT '3000' AS ITEM FROM DUAL UNION ALL   SELECT '5000' AS ITEM FROM DUAL   ) M   LEFT JOIN ITEM_MASTER I ON M.ITEM = I.ITEM GROUP BY   M.ITEM ORDER BY   M.ITEM

その他の回答 (1)

回答No.1

ITEM_MASTER<--このテーブルはマスタになるのでしょうか? もし、トランザクションであれば、マスタテーブルと結合してデータ取得が可能だと思います。 [ITEM_MASTER] ITEM data 100 aa 100 bb 200 cc [MASTER] ITEM NAME 000 ITEM0 100 ITEM1 200 ITEM2 300 ITEM3 のテーブルが存在しているのであれば、 SELECT    A.ITEM   ,COUNT(B.ITEM) FROM   MASTER A left join ITEM_MASTER B   on (A.ITEM = B.ITEM) WHERE   A.ITEM IN ('000', '100', '200', '300', '400') GROUP BY   A.ITEM ORDER BY   A.ITEM こんな感じだったらいけると思いますが、、どうでしょう?

taru73
質問者

補足

回答ありがとうございます。   残念ながら、というかITEM_MASTERはトランザクション ではなく、マスターテーブルなのです。

関連するQ&A

  • count(*)のcountをとりたい

    現在、以下のようなテーブルを扱っているのですが、 +---------+ |accountid| +---------+ |   999| |   999| |   638| |   638| |   638| |   999| |   999| |   638| +---------+ を、ユニークな件数でとろうとしています。 現在は > select count(*) from TABLE group by accountid; +----------+ | count(*)| +----------+ |     4| |     4| +----------+ 2 rows in set (0.00 sec) などとして、「2 rows in set」を読むと言う方法なのですが、それだと人の手を介さないといけないのでどうにか出力結果をダイレクトに取得したいのです。 SQLサーバで使えるらしい select count(*) from (select count(*) from TABLE group by accountid) as AA; と言うSQL文を使っても無理だったので、どなたか方法をご存じないでしょうか???

    • ベストアンサー
    • MySQL
  • count(*)

    countの使い方で、 select score, count(*) from mydb group by score; のように使う場合に、()の中に*ではなくて数字を入れても結果は同じでした。 数字を入れたサンプルソースは見たことがないのですが、あのかっこの中は*以外を使うことはありますか? select score, count(*) from mydb group by score which count(*) > 3; というのをやりたい場合、正しいSQLはどうなりますか?

    • ベストアンサー
    • MySQL
  • 1個のSQL分で2種類以上の件数値を取得する

    SQL分の記述で質問なんですが、 データベース上に日付、時間、フラグと言う項目があります。 同一の日付、時間のものは数件ずつあります。 フラグは"b"と"1"があります。 このデータの日付・時間辺りの件数と+フラグが"1"の件数を同時に取得するSQL分はかけますでしょうか? 別々ならば、 SELECT DATE,TIME,COUNT(*) AS KENSU1 FROM W_TABLE GROUP BY DATE,TIME ORDER BY DATE,TIME と SELECT DATE,TIME,COUNT(*) AS KENSU2 FROM W_TABLE WHERE FLG="1" GROUP BY DATE,TIME ORDER BY DATE,TIME でかけると思うのですが、 1個のSQL分で記述は可能でしょうか? 処理結果を 05/02/23 12:00 10 5 05/02/24 10:00 12 3 (日付・時間・件数・フラグ="1"の件数  見たいに取得したいのですが..

  • 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 としなければならないのでしょうか

  • 動的SQLのCOUNTのとり方

    動的SQLで、DBの件数を取得したいのですが、 うまく取得できず困っています。 教えてください! 以下の様に、記述しているのですが取り方間違っていますか? EXEC SQL EXECUTE statment INTO :CNTNUM; PREPEAした、statmentには SELECT COUNT(*) FROM テーブル名 where kbn = 3; と、ごくごく普通のSELECT COUNT文です。 cnt_numは、int型のホスト変数で宣言しています。 デバックしながら実行すると、cnt_numの値は初期化した時の 0のままです。実際取得した件数が0件なのかもと思い 初期化時に3を代入して実行したら、やはり値は3でした。 なので、件数が取得出来ていないようです。 オラクルエラーにもならず、次の処理へ流れていってしまいます。 知っている方、教えてください。

  • GROUP BYを使用したCOUNT

    いつもお世話になっております。 現在下記のようなSQLを発行していまして、 件数を取得したいのですが、取得データの結果が 0件以外の時は良いのですが、0件の時は 「レコードが選択されませんでした」と表示されてしまいます。 何とか0件で表示できないでしょうか? SELECT COUNT(*) FROM T_M_MAKER HAVING MAKER_CD = '010' GROUP BY MAKER_CD 苦し紛れに SELECT DECODE(COUNT(*),'',0,COUNT(*)) FROM T_M_MAKER HAVING MAKER_CD = '010' GROUP BY MAKER_CD というのもやってみましたが、結果は一緒でした。 どなたかお分かりになる方、回答をお願いします。

  • SQL 件数取得を速くしたい

    SQLでテーブルなどからSELECTされた件数を得る際に、 select count(*) from ~ 等とするかと思いますが、この結果が返ってくるのが遅くて困っています。 少しでも速く件数を得たいのですがどのような方法がありますでしょうか? 教えてください。 私が使っている環境はOracle 8iで 特に今回はgroup byを含むビューからの検索を行おうとしています。

  • MySQLのcountを使って件数を表示したい

    お世話になります。 MySQL・PHPで検索のプログラムを作成しています。 検索結果の件数についてわからないところがあって質問させていただきました。 どうぞよろしくお願いします。 place・・・エリア 1,2,3,4,5,6・・・と番号が入っています。 1番が大阪、2番が東京・・・のような感じで割り振っています。 欲しい結果は、 大阪(100件) 東京(6524件)・・ ・のような形で、countした値をカッコ内に件数として表示させたいと思っております。 SELECT place,count(*) FROM test_tbl where place IN (1,2,3) GROUP BY place WITH ROLLUP; if(!($rs = mysql_query($query))) { print $query; print "クエリー失敗"; } このような感じで地域をグループ化して件数を表示させたいのですが、 1のエリアも2のエリアも3のエリアも該当するデータがない場合、「0件」という結果が欲しいのですが、 SQLのエラーが帰ってきてしまいます。 「失敗」の部分に「0」を入れれば0件になると思うんですが、こんなふうにしていいものか悩んでいます。 エラーはエラーで表示させたいんですが・・・。 そもそも、考え方自体が間違えてるのか、それとも他の方法があるのか・・・ 全く想像できない状態です。 どうか、アドバイスよろしくお願いします。

    • 締切済み
    • PHP
  • forで無限ループになっていないかどうか

    各アイテムの最新3件だけデータベースに残したいと思い、下記のようにしてみました。 動作を確認したところ問題なかったのですが、何か(無限ループする可能性があるなど)問題があるようでしたら、ご指摘いただけないでしょうか。 よろしくお願いいたします。 for ($num = 1; $num < 21; $num++){ // アイテムが20件ある場合 $sql = "SELECT COUNT(id) AS cnt FROM item where item_id=$num ;"; $res = mysql_query($sql, $conn) or die; $row = mysql_fetch_array($res, MYSQL_ASSOC); $count = $row["cnt"]; if($count<3){ // アイテムが3件より少なかったら何もしない } else{ $delete_count=$count-3; $sql = "delete from item where item_id=$num order by date limit $delete_count;"; $res = db_query($sql, $conn); } }

    • ベストアンサー
    • PHP
  • 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なそうなので、気になって質問しました。 よろしくお願いします。