MySQLで項目別の合計件数を一文で取得する方法

このQ&Aのポイント
  • MySQLを使用して、組ごとの登録人数を一文で集計する方法について教えてください。
  • 氏名と組の情報を持つマイテーブルから、組ごとの登録人数を集計する方法をご教示してください。
  • 組ごとの登録人数を一文で取得するために、6回の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
  • 回答数2
  • ありがとう数3

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

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

$rstをechoしちゃまずいでしょう(苦笑) mysql_fetch_array()してください。 $rst = mysql_query($sql, $con); $table=""; while($row=mysql_fetch_array($rst,MYSQL_ASSOC)){ $table.=<<<eof <tr> <td>{$row["kumi"]}組</td> <td>{$row["cnt"]}名</td> </tr> eof; } $table="<table>{$table}</table>"; print $table;

litton101
質問者

お礼

yamabejpさん、早速のご教示ありがとうございました。 >$rstをechoしちゃまずいでしょう(苦笑) お恥ずかしい話です、、、、 結果ですが、おかげさまでご教示の while($row=mysql_fetch_array($rst,MYSQL_ASSOC)){ で解決できました。 大変助かりました。今後ともよろしくお願い致します。

その他の回答 (1)

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

SELECT kumi,COUNT(*) AS CNT FROM マイテーブル GROUP BY kumi でよいのでは?

litton101
質問者

補足

yamabejpさん、いつもお世話になります。 GROUP BY ってこういう使い方をするのですね(^^;大変参考になりましたm(_ _)m phpMyAdminで試したら、見事にうまくいきました。。。 すみません、もう一歩ご教示下さい。 $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "SELECT kumi,COUNT(*) AS CNT FROM マイテーブル GROUP BY kumi"; $rst = mysql_query($sql, $con); echo $rst; とやると、「Resource id #7」と返ってきますが、 <table>タグで結果を以下のように組むにはどのように記述したら いいでしょうか。 ----------- | 1 | 23名 | ------------ | 2 | 25名 | ------------ | 3 | 25名 | ------------ | 4 | 24名 | ------------ | 5 | 27名 | ------------ | 6 | 22名 | ------------ 何卒、よろしくお願い致します。

関連するQ&A

  • SQL文に変数を埋め込む場合の方法

    //config.php //$table = "TableName"; 1:require "config.php"; 2:$sql = "SELECT " . $fld . " AS genre, 3: COUNT(*) AS cnt FROM TableName GROUP BY " . 4:$fld; $res = mysql_query($sql, $conn) or die("Data抽出エラー"); 上記のソースを 2:$sql = "SELECT " . $fld . " AS genre, 3: COUNT(*) AS cnt FROM " . $table . " GROUP BY " . $fld; 4: $res = mysql_query($sql, $conn) or die("Data抽出エラー"); この様にして、config.phpより、テーブル名を変数として読み込みたいのですが、エラーになってしまいます。 3行目をどのように記述すればよいのでしょうか?

    • ベストアンサー
    • PHP
  • 行数の取得

    mysql初心者です 行数を取得したいです 処理をすこしでも軽くしたいです このように書くとテーブルの中身は見に行かないらしいのですが SELECT COUNT(*) AS cnt FROM bbs WHEREをつけると中身を見に行きますか? SELECT COUNT(*) AS cnt FROM bbs WHERE sure_id=5 中身を見に行く場合、カラムを指定したほうが早いでしょうか? SELECT COUNT(id) AS cnt FROM bbs WHERE sure_id=5 よろしくお願いします

    • ベストアンサー
    • MySQL
  • 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をどう変更すればいいのでしょうか?

  • sql文の中での時間取得

    sql文の中で以下のように時間を指定してselectしています。ですが、時間を「sqlの実行時間からn分前までの間」に修正したいと考えています。どなたかご教示いただけませんでしょうか。 select count(*) from tableA where hoge = '0000' and end_time >= cast('2000/1/01 00:00' as timestamp) and end_time < cast('2011/1/31 00:00' as timestamp) たとえば select count(*) from tableA where hoge = '0000' and end_time >= sqlを実施した時間から45分前 and end_time < sqlを実施した時間 のようにしたいです。 ご協力お願い致します。

  • 件数とデータを同時に取得するには?

    1つのSQL文で件数とデータを取得したいのですが無理でしょうか? イメージ図↓ SELECT カラム名,COUNT(*) FROM テーブル名; COUNT  カラム名 -------------------  3     データA       データB       データC

  • 集計関数の合計について

    お世話になります。 SQLSever2005を使用しています。 Count(*)で月毎のデータ件数を集計し、またその結果を出力するSQLを考えております。 SELECT  (SELECT Count(*) FROM TBL_TEST T1 WHERE T1.T_DATE>='2005/01/01' AND T1.T_DATE=<'2005/01/31') AS CNT_1,  (SELECT Count(*) FROM TBL_TEST T2 WHERE T2.T_DATE>='2005/02/01' AND T2.T_DATE=<'2005/02/31') AS CNT_2,   (SELECT Count(*) FROM TBL_TEST T3 WHERE T3.T_DATE>='2005/03/01' AND T3.T_DATE=<'2005/03/31') AS CNT_3,   (CNT_1+CNT_2+CNT_3) AS TOTAL_CNT ・・・・・・・・・・・・ (★)  FROM TBL_TEST T  WHERE ・・・・・・・・・ 結果(★)のところで『CNT_1は無効です』というエラーになってしまいます。 ちなみにAccessではエラーにならずに結果を出力していました。 上記のSQL文はどのように修正すればよろしいでしょうか?

  • InformixのSQL文Where句で

    マイナーなRDBS(?)なので回答をいただけるか不安ですが… InformixのSQL文(単純なSELECT文)で、以下のような 文の場合、検索条件はどのような解釈になるのでしょうか? select  count(*) from  テーブル名 where  カラム名 = ? です。 要は「?」が何を示すのかが分からないのです。 matches(Oracleでいうlike)の場合、Oracleの%が*に、 _(アンダースコア)が?になるらしいのですが、 = で完全一致で繋いださいにどうなるのかが分かりません。 ちょっとした情報でもよいので、ご教授お願い致します。

  • SQL WHERE文のノットイコールについて

    初歩的な質問ですみません。 Oracle9iでsqlplusで接続しています。 「member_accountテーブルのdelete_flag(VARCHAR2)カラムの値が'1'ではない」ものを抽出したいと考えてます。 ただ、正しい結果が返ってきません。 何が問題でしょうか?よろしくお願いいたします。 ============================================================ SQL> select count(ID) from member_account; COUNT(ID) ---------- 16450 SQL> SQL> select count(ID) from member_account where delete_flag='1'; COUNT(ID) ---------- 107 SQL> SQL> select count(ID) from member_account where delete_flag<>'1'; COUNT(ID) ---------- 0 SQL> SQL> select count(ID) from member_account where delete_flag!='1'; COUNT(ID) ---------- 0 ============================================================ よろしくお願いいたします。

  • SQLでグループ化した結果の件数を求めるには?

    下記のようなグループ化した結果を表示するSQL文を作りました。 SELECT メーカコード FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") これを実行するとちゃんと結果が出るのですが、その結果の件数を求めるにはどのようなSQL文を追加すれば宜しいのでしょうか? COUNT文を使うと出来そうなのですが、 SELECT メーカコード, COUNT(メーカコード) AS CNT FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") とやるとメーカコードの個別件数が表示されてしまいます。 どうぞよろしくお願いします。

  • SQL文の作り方、SUM関数を2回使いたいです。

    こんばんわ、SQL分の勉強をしています。以下のSQL文を見てください。 select sum(dat1) from daityou,book (SELECT book.author,book.bookname,book.money*daityou.cnt AS dat1 FROM book, daityou where book.bookname=daityou.bookname); 内容は、著者と本のタイトルと本ごとの売り上げの一覧表を作成し、さらに著者毎に売り上げを集計したいのですが、エラーになります。 どのような文を作成すればいいのでしょうか? SUM関数を2回使わなくてもいいです。 よろしくお願いします。