こんにちは。
本当に初歩的な質問なのですがphpでmysqlにある1000のデータを
上から100個ずつごとで平均を求めたいです。
データは、オートインクリメントのidが存在して1~1000まで番号があります。
今後、データを二万以上扱いたいので
limit以外でのやり方が知りたいので教えていただけると幸いです。
当方、初心者の為、どなたか詳しい方
ご教授ください!
$res = mysqli_query($conn,"SELECT AVG(test) FROM $Table_name");
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/06 08:53
回答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
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
総合スコア114784
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/06 02:35
2018/07/06 02:56
退会済みユーザー
2018/07/06 03:00
2018/07/06 03:07
退会済みユーザー
2018/07/06 03:10
2018/07/06 09:10
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
総合スコア25174
0
こういうことかしら(動作未確認)
PHP
1$res = mysqli_query($conn,"SELECT AVG(test) FROM $Table_name GROUP BY truncate(id/100,0)");
投稿2018/07/05 23:45
総合スコア16998
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; 5・ 6SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 900, 1000;
投稿2018/07/05 16:44
編集2018/07/05 16:45退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/05 17:02 編集
退会済みユーザー
2018/07/05 17:11
退会済みユーザー
2018/07/05 20:07 編集
退会済みユーザー
2018/07/05 20:51 編集
2018/07/06 09:16
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。