• ベストアンサー

GROUP BY句の集計について

はじめまして。 いろいろ調べて、何度試しても思うように 結果がでなかったので、投稿させて頂きました。 グループの集計をしてるのですが、 何個のグループがあるのかカウントしたいのです。 aaa bbb 110 a 110 b 111 c 112 d というDBに select aaa, bbb, count(*) as cnt from database GROUP BY aaa ORDER BY aaa だとそのグループ内の該当レコード数がカウントされてしまいます。 上記の例だとグループ数が“3”と結果を返すようにしたいのです。 では。宜しくお願いします。

  • MySQL
  • 回答数4
  • ありがとう数4

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

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

たびたびすいません^^; mysql_fetch_array → mysql_num_rows に変更したらどうでしょうか?

shibaraku
質問者

お礼

またまた回答ありがとうございます! $rst = mysql_query($sql, $con); $tcnt = mysql_num_rows($rst); として、思うような結果が出ました。 本当にありがとうございました!

その他の回答 (3)

回答No.3

よく見たら、見当違いな回答をしてますね^^; ごめんなさい m(_ _)m

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

インラインクエリーが使えるDBならこれで。 select count(*) as cnt from (select aaa, bbb from database GROUP BY aaa)

shibaraku
質問者

お礼

回答ありがとうございます。 残念ですがMYSQLなのでインラインは使えないようです。 説明不足ですいません。。

回答No.1

select aaa, bbb, count(*) as cnt from database GROUP BY aaa ORDER BY aaa このSELECT文だと [aaa] でグループ化をしているので、 [110],[111],[112] という3つのグループになります。

shibaraku
質問者

お礼

早速の回答ありがとうございます! 3つのグループには分けられるのですが、この文の後に $rst = mysql_query($sql, $con); $col = mysql_fetch_array($rst); $tcnt = $col['cnt']; と書いているのですが、 $tcntの値にそのグループに該当するレコード数が格納されてしまいます。 (上記の例では“2”が代入されます) そうではなくて、グループの数を出力したいのです。

関連するQ&A

  • クロス集計での order by句の使い方

    下記の order byの部分を年月日でなく合計件数順に並べ変えたいのですが、Count(氏名)を入れると「 order by句で集計関数は使えません」のようなメッセージが出ます。(access2000) 何か良い方法はないでしょうか。 TRANSFORM Count(氏名) AS 氏名のカウント SELECT 年月日, Count(氏名) AS 合計件数 FROM 日誌 GROUP BY 年月日 ORDER BY 年月日 PIVOT 区分; #access素人です。

  • GROUP BY句の使用方法について(初歩的)

    GROUP BY句の使用方法について質問させて下さい。 ■使用するテーブル  ID   日付 ----------------------  AAA   2007-04-01  AAA   2007-04-01  AAA   2007-04-02  AAA   2007-04-03  BBB   2007-04-01  BBB   2007-04-03  CCC   2007-04-02  CCC   2007-04-02  CCC   2007-04-02 ■抽出したいこと  ID毎のカウントを取りたいのですが、その際に同じ日付は1回のカウントとして抽出したいのです。  即ち、下記の結果を得るのが目的ですが、どのようなクエリとすればいいでしょうか?  ID  cnout(*) ----------------------  AAA   3  BBB   2  CCC   1 初歩的な質問なのですが、宜しくお願い致します。 (※環境はSQL-Server2000です)

  • group by したものをsumしたのですが方法がわかりません。

    ある情報をgroup byしその数をcountし、そのcountした数をsumしたのですがどのようにすればよろしいでしょうか? 例えば DB名 test a | ------ ABA | A | AA | ABA | select a,count(*) count from test group by a; a |count| ------------- ABA | 2 | A | 1 | AA | 1 | このカウントの数字を一回でsumすることは可能でしょうか? 宜しくお願いします。

  • case when elseとグループ関数の併用について

    こんばんわ! Oracle9iのSQLPlusにて、table_Aテーブルの「AAA」に登録されている値ごとにカウントをとりたいだけなのですが、未入力分のカウントも必要になります。そこで以下のようなSQL文を作りました。 select case when AAA IS NULL then '未入力' else AAA end, count(distinct BBB) from table_A group by GROUPING SETS((AAA),()) 結果は以下のように最後の合計行にも未入力が入ってしまいます。 AAA   count あ   10 い   5 う   6 え   15 お   12 未入力 7 未入力 55 ←GROUPING SETS関数による合計 いろいろ試してみましたがうまくいきません。 どなたかご教授いただけませんでしょうか? 宜しくお願い致します。

  • 集計方法について教えて下さい。PHP+MYSQL

    こんばんは。よろしくお願い致します。 データベースに下記のようなデータが入っています。 no point name --------------------- 123 100 aaa 123 50 aaa 124 100 bbb 130 30 ccc 131 80 ddd 131 100 ddd 131 20 ddd 133 10 eee このデータを元に、下記のような結果を得たいのです。 noが同じデータのpointを集計し、まとめたレコードの件数をcount項目として欲しいです。 no point name count ------------------------------ 123 150 aaa 2 124 100 bbb 1 130 30 ccc 1 131 200 ddd 3 133 10 eee 1 SQLだけで実現できるのでしょうか?? 具体的にどのような方法で実現できるか、教えて頂けると有難いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • グループ書き込み権がわからない

    ユーザAAAをグループBBBに追加しました。 /home/BBBをグループBBBが書き込みできるようにしました。 しかし、ユーザAAAが/home/BBBにディレクトリ作成できません。 何が間違っているのでしょうか? whoami #=> AAA sudo adduser BBB sudo usermod -G BBB AAA cd /home/BBB sudo chmod -vR g+w ./ ls -l /home/BBB #=> drwxrwxr-x 2 BBB BBB 4096 2009-05-27 BBB mkdir -v mkdir_by_AAA #=> mkdir: ディレクトリ mkdir_by_AAA を作成できません: Permission denied

  • GROUP BY の集計結果をさらにGROUP?

    下記ようなのデータベースを使い、GROUP BYで、 +------+-----+-------+ │ID  │工場│品名 │ +------+-----+-------+ │30001│愛知│チョコ│ +------+-----+-------+ │30001│愛知│アメ │ +------+-----+-------+ │40002│島根│ポテチ│ +------+-----+-------+ │40002│島根│焼そば│ +------+-----+-------+ │50001│愛知│餃子 │ +------+-----+-------+ ↓↓↓↓↓↓↓↓↓↓↓↓ 同じIDをまとめて表示しています。 +------+-----+---------------+ │ID  │工場│品名       │ +------+-----+---------------+ │30001│愛知│チョコ/アメ   │ +------+-----+---------------+ │40002│島根│ポテチ/焼そば │ +------+-----+---------------+ │50001│愛知│餃子       │ +------+-----+---------------+ この結果からさらに工場の数をカウントしたいのですが、 +-----+-----+------------+ │工場│件数│ID      │ +-----+-----+------------+ │愛知│2件 │30001/50001│ +------+----+------------+ │島根│1件 │40002    │ +------+----+------------+ ご存じの方いらっしゃいましたら、ご教授お願いいたします。 また、集計はGROUP BYしか扱ったことないのですが他の方法が必要なのでしょうか。 ヒントだけでもあれば・・・と思っています、宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ソートしてからグループ化したいけれど・・・。

    SQL構文について質問させて下さい。 ABC │ID │DATE ------------------ XXX │aaa │02/01 YYY │bbb │02/02 YYY │aaa │02/03 と言うデータから、DATEが新しい(大きい)値を抽出し、 次に重複するIDを排除した結果を出したいです。 希望の検索結果は、 ABC │ID │DATE ------------------ YYY │bbb │02/02 YYY │aaa │02/03 となって欲しいのです。 単純にソートした後でIDでグループ化したいのですが、当然できなく、私の考えでは、 SELECT abc, id, max( date ) FROM `test` GROUP BY id ORDER BY date DESC なのですが結果は、 ABC │ID │DATE ------------------ YYY │bbb │02/02 XXX │aaa │02/03 と言う風になり、何故か、2行目の様にDATEに対して、ABCの値が別の行の ID:aaaの値になってしまってます。 どうしたら良いのでしょうか?

    • ベストアンサー
    • 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を返したいときはどのようにするものなのでしょうか?ご教授いただければと思います。 宜しくお願い致します。

  • グループ化したあとソートしたい

    MySQL4.1(Windows)での質問です。 以下のようなテーブルのA列をグループ化して、そのcount(A)の値でソートしたいのですが、エラーになってしまい、実行できません。どうすれば良いでしょうか? テーブル A|B ----- 0|aaa 1|bbb 2|ccc 1|ddd 1|eee 0|fff クエリ select A,count(A) from table group by A order by count(A) 表示させたいデータ A|count(A) ---------- 1|3 0|2 2|1

    • ベストアンサー
    • MySQL