質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

501閲覧

phpで100ごとの平均を表示したい

sansan00

総合スコア8

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/07/05 16:40

編集2018/07/06 09:08

こんにちは。
本当に初歩的な質問なのですがphpでmysqlにある1000のデータを
上から100個ずつごとで平均を求めたいです。
データは、オートインクリメントのidが存在して1~1000まで番号があります。
今後、データを二万以上扱いたいので
limit以外でのやり方が知りたいので教えていただけると幸いです。
当方、初心者の為、どなたか詳しい方
ご教授ください!

$res = mysqli_query($conn,"SELECT AVG(test) FROM $Table_name");

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sansan00

2018/07/06 08:53

指摘いただきありがとうございます。
guest

回答5

0

MySQL動作?実行速度?確認はしてない
動かなかったら意味をよみといて

sql

1-- SELECT TRUNCATE(id,-2),AVG(num) -- 最初のレコード目が99件になるはずなので 2SELECT TRUNCATE(id - 1,-2),AVG(num) 3FROM test 4-- GROUP BY TRUNCATE(id,-2) 5GROUP BY TRUNCATE(id - 1,-2)

投稿2018/07/05 23:45

編集2018/07/06 02:37
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sansan00

2018/07/06 09:14

ありがとうございます。丁寧にご説明まで入れていただき大変参考になりました
sansan00

2018/07/06 09:14

ありがとうございます。丁寧にご説明まで入れていただき大変参考になりました
guest

0

ベストアンサー

idが1から始まる連続した数値ならこう。
何らかのソート順で100個ずつやるならもう少し工夫が必要

  • テーブル作成

SQL

1create table tbl(id int primary key auto_increment,val int);
  • プロシージャ作成

SQL

1drop procedure if exists my_proc; 2delimiter // 3create procedure my_proc() 4begin 5declare cnt int; 6set cnt=1; 7while cnt<=1000 DO 8insert into tbl(val) values(floor((RAND() * 1000))); 9set cnt=cnt+1; 10end while; 11end 12// 13delimiter ;
  • プロシージャ呼び出し

SQL

1call my_proc;
  • 集計

SQL

1select floor((id-1)/100) as myid,avg(val) from tbl 2group by myid

投稿2018/07/06 00:41

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/07/06 02:35

あっ・・・ うちのだと最初の99件か
yambejp

2018/07/06 02:56

0から始まれば問題ないでしょう
退会済みユーザー

退会済みユーザー

2018/07/06 03:00

オートインクリメント といってるので1から
yambejp

2018/07/06 03:07

オートインクリメントのカラムは値を指定しなければ1からとなるだけで 直接指定すれば0でもいいし、unsignedしなければマイナス値でもOKです
退会済みユーザー

退会済みユーザー

2018/07/06 03:10

マイナスありなんか^^; 知らんかった。。。
sansan00

2018/07/06 09:10

丁寧にご説明いただきありがとうございます。 無事解決しました。
guest

0

削除してidに欠番がある事を考慮した場合。
※連番はベタな方法を採用しているので、変数使うならネットで調べて

SQL

1select truncate(seq/100,0) block_seq, avg(test) 2from ( 3 select *, (select count(*) -1 from tbl where id<=t1.id) as seq from tbl t1 4) t2 5group by truncate(seq/100,0)

投稿2018/07/06 03:05

sazi

総合スコア25174

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sansan00

2018/07/06 09:09

ありがとうございます。欠番の考慮は視野に入れていなかったので 参考になりました!
guest

0

こういうことかしら(動作未確認)

PHP

1$res = mysqli_query($conn,"SELECT AVG(test) FROM $Table_name GROUP BY truncate(id/100,0)");

投稿2018/07/05 23:45

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/07/05 23:48

負の数で切り捨てすれば÷必要ないよね
ttyp03

2018/07/05 23:49

おー、なるほど、そうですね。 頭いいー。
sansan00

2018/07/06 09:12

初心者なので実際にプログラムを載せていただきとても分かりやすかったです。ありがとうございます!
guest

0

sql

1SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 0, 100; 2SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 100, 200; 3SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 200, 300; 4SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 300, 400; 56SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 900, 1000;

投稿2018/07/05 16:44

編集2018/07/05 16:45
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sansan00

2018/07/05 17:02 編集

迅速な回答本当にありがとうございます。今後、扱うデータ増える可能性を考えると、自分で一行ずつ書くのは大変なので、他に何か良い方法がありましたら是非教えてください。
退会済みユーザー

退会済みユーザー

2018/07/05 17:11

言っていることがわかんないんだけど。どう言うこと?
退会済みユーザー

退会済みユーザー

2018/07/05 20:07 編集

言葉が足りずすみません。データが2万ほどに増える予定なので範囲をlimitで書いていくのは、非効率的なので他の書き方があれば教えて欲しいです。
退会済みユーザー

退会済みユーザー

2018/07/05 20:51 編集

サブ垢ですか? まあ、関係ないけど、頼まれて書くコードはお仕事。金とるよw まずは、自分の頭を使って考えて見てください。その上でわからない、詰まった場合に聞いてください。 1から10まで聞くのではなく、7、8まで頑張った。残りの1、2を手伝って欲しいと言うのは歓迎します。 https://teratail.com/help/avoid-asking ここに書いてあるように、「コードをください・デバッグしてください等の丸投げの質問」は推奨されていません。
sansan00

2018/07/06 09:16

知識、配慮が至らない点ばかりですみません。 ご教授いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問