• ベストアンサー

SQLでのcount方法

Watapo3の回答

  • Watapo3
  • ベストアンサー率76% (33/43)
回答No.2

動作確認はしていない為、別名の指定にてエラーが起きるかもしれませんが、 SELECT data, Count(data) count FROM (SELECT data1 data from hoge union all select data2 from hoge where hoge.data1 <> hoge.data2) GROUP BY data で、如何でしょうか? 尚、テーブル名は「hoge」とさせて頂きました。

関連するQ&A

  • select count の同一sqlで割り算

    Oracleのsql*plusで 以下のsqlを実行しています。 select count(*) from tableA ; 上記のの結果としてカウント結果が返却されているのですが、今回はその結果を割り算したいのです。イメージとしては以下のとおりです。 [select結果÷n] さらにいうと上記のような計算を同一sql内で計算できることは可能でしょうか。 また、sql内での計算が難しいようでしたら他方法をご教授していただけませんでしょうか。 勉強不足で、すみません。 ご協力、よろしくお願いします。

  • SQLのCOUNT(*)について

    SQLのCOUNTでよくCOUNT(*)というのを見かけるのですが、 COUNT(ID)などとした場合と比べて、理論上どちらが早い のでしょうか?

  • 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の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でした。 なので、件数が取得出来ていないようです。 オラクルエラーにもならず、次の処理へ流れていってしまいます。 知っている方、教えてください。

  • countで0を返せますか?

    PHP,Mysql5です。 IFNULL関数で実現できそうなことがわかり以下のようなソースで 試してみたのですが0ではなくnullが返ってきてしまいます・・・ $where_sql = join(' || ' , $where); //$where_sqlの中身 DATE_FORMAT(create_date, '%Y-%m-%d') = '2009-03-01' || DATE_FORMAT(create_date, '%Y-%m-%d') = '2009-03-02' || 中略・・・ DATE_FORMAT(create_date, '%Y-%m-%d') = '2009-03-30' || DATE_FORMAT(create_date, '%Y-%m-%d') = '2009-03-31' $sql = "SELECT create_date, IFNULL(Count(order_id), 0) as cnt FROM products_order_detail WHERE {$where_sql} GROUP BY order_id"; 例えば以下のような構成だとします。 2009-03-05のデータが1件存在 2009-03-12のデータが2件存在 2009-03-24のデータが1件存在 現状の結果は以下の通りです。 Array ( [0] => Array ( [create_date] => 2009-03-05 [cnt] => 1 ) [1] => Array ( [create_date] => 2009-03-12 [cnt] => 2 ) [2] => Array ( [create_date] => 2009-03-24 [cnt] => 2 ) 当然の結果なのですがこのように存在する分のデータのみが返って きます。希望としての結果の配列は以下のような感じで Array ( [0] => Array ( [create_date] => 2009-03-01 [cnt] => 0 ) 中略・・・ [4] => Array ( [create_date] => 2009-03-05 [cnt] => 1 ) 中略・・・ [11] => Array ( [create_date] => 2009-03-12 [cnt] => 2 ) 中略・・・ [23] => Array ( [create_date] => 2009-03-24 [cnt] => 2 ) 中略・・・ [30] => Array ( [create_date] => 2009-03-31 [cnt] => 0 ) のように比較する日付のデータがあればカウントしなければcntに nullではなく0を入れたいのですがどうすればいいでしょうか? もしくはPHPにて処理するべき事なのか方法が思いつきません。

    • 締切済み
    • PHP
  • COUNTを使うのでしょうか

    SQLについて質問があります。 以下の様なテーブルが2つあります。 -Table1- |id|type| |1 |男 | |2 |女 | |3 |猿 | -Table2- |id|name|type_id| |1 |太郎|1   | |2 |紀子|2 | |3 |幸子|2 | 上記のテーブルから以下の結果が欲しいのですが SQLではどのように書けば良いでしょうか。 |type|COUNT| |男 |1 | |女 |2 | |猿 |0 | 以下の結果は取得できたのですが 猿の結果も欲しいです。 |type|COUNT| |男 |1 | |女 |2 | 基本的な質問で大変申し訳ありませんが教えて頂けますでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 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
  • sumやcount関数について

    いつもお世話になっております。 以下のようなファンクションの中でカウント数を戻り値として返したかったのですが、当然「0」の場合は「0」で返したいのですが、当初以下の場合には「ORA-01403: データが見つかりません。」エラーが発生し上手くいきませんでした。 省略 begin select count(colA) into aaa ~~ group by colB; ret = nvl(aaa,0) return ret; end; 調査のためselect文だけを切り取りSQLPlusにて実行したところ、「レコードが選択されませんでした」となっておりました。 今度は試しに、「select count(count(colA)) into aaa ~~ group by colB;」としたところ、「0」で返ってきましたし、1以上の場合も正しい数値で返ってきました。 同じようにselect文だけを切り取りSQLPlusにて実行したところ、以下のような結果となりました。 count(count(colA)) --------------------- これは、nullという意味になるのでしょうか?? 「レコードが選択されませんでした」との違いはなんなのでしょうか?また、通常PL/SQLにてカウント数=0を返したいときはどのようにするものなのでしょうか?ご教授いただければと思います。 宜しくお願い致します。

  • SQLのSelect Countについて

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

  • 異なる条件でcountしたい

    使用しているのはMySQL5.5です。 以下のようなデータベース(→元データベース)があり、プロジェクト毎の作業時間と作業日数を出すために select プロジェクト, count(*), sum(時間) order by プロジェクト; としたところ、同一日の作業が二重にカウントされて、正確な作業日数が計算できません。 →誤った集計結果1 また、 select プロジェクト, count(*), sum(時間) order by プロジェクト, 作業; とすると、今度はプロジェクト単位で作業時間が計算できませんでした。 →誤った集計結果2 これを、同一日はカウントせず、作業日数と作業時間を集計するには どのようにすればいいでしょうか。 ・元データベース 日付|プロジェクト|作業|時間 2015-10-01|A|DB作成|2 2015-10-01|A|データ入力|1 2015-10-01|B|DB作成|3 2015-10-02|A|データ入力|1 2015-10-02|B|DB作成|4 2015-10-02|B|データ入力|2 ・誤った集計結果1 プロジェクト|作業日数|時間 A|3|4 B|3|9 ・誤った集計結果2 プロジェクト|作業日数|時間 A|1|2(DB作成のrow) A|2|2(データ入力のrow) B|2|7(DB作成のrow) B|1|2(データ入力のrow) ・理想の集計結果 A|2|4 B|2|9

    • ベストアンサー
    • MySQL