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

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

ただいまの
回答率

90.51%

  • PHP

    20408questions

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

  • MySQL

    5873questions

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

  • phpMyAdmin

    652questions

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

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

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 332

sansan00

score 2

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

$res = mysqli_query($conn,"SELECT AVG(test) FROM $Table_name");
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/07/06 08:56

    https://teratail.com/legal 第7条(禁止事項) (11)複数のユーザーIDを1人で保有する行為

    キャンセル

  • sansan00

    2018/07/06 17:53

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

    キャンセル

回答 5

checkベストアンサー

+4

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

  • テーブル作成
create table tbl(id int primary key auto_increment,val int);
  • プロシージャ作成
drop procedure if exists my_proc;
delimiter //
create procedure  my_proc()
begin 
declare cnt int;
set cnt=1;
while cnt<=1000 DO
insert into tbl(val) values(floor((RAND() * 1000)));
set cnt=cnt+1;
end while;
end
//
delimiter ;
  • プロシージャ呼び出し
call my_proc;
  • 集計
select floor((id-1)/100) as myid,avg(val) from tbl 
group by myid

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/06 11:35

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

    キャンセル

  • 2018/07/06 11:56

    0から始まれば問題ないでしょう

    キャンセル

  • 2018/07/06 12:00

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

    キャンセル

  • 2018/07/06 12:07

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

    キャンセル

  • 2018/07/06 12:10

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

    キャンセル

  • 2018/07/06 18:10

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

    キャンセル

+4

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/06 18:14

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

    キャンセル

  • 2018/07/06 18:14

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

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/06 08:48

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

    キャンセル

  • 2018/07/06 08:49

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

    キャンセル

  • 2018/07/06 18:12

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

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/06 18:09

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

    キャンセル

0

SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 0, 100;
SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 100, 200;
SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 200, 300;
SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 300, 400;
・
SELECT AVG(`test`) FROM table_name ORDER BY `id` ASC LIMIT 900, 1000;

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/06 01:57 編集

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

    キャンセル

  • 2018/07/06 02:11

    言っていることがわかんないんだけど。どう言うこと?

    キャンセル

  • 2018/07/06 05:05 編集

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

    キャンセル

  • 2018/07/06 05:27 編集

    サブ垢ですか?
    まあ、関係ないけど、頼まれて書くコードはお仕事。金とるよw
    まずは、自分の頭を使って考えて見てください。その上でわからない、詰まった場合に聞いてください。
    1から10まで聞くのではなく、7、8まで頑張った。残りの1、2を手伝って欲しいと言うのは歓迎します。

    https://teratail.com/help/avoid-asking

    ここに書いてあるように、「コードをください・デバッグしてください等の丸投げの質問」は推奨されていません。

    キャンセル

  • 2018/07/06 18:16

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    先頭が同じ数値のものを一つの配列にまとめる

    閲覧ありがとうございます。 数値の文字列があり、それを先頭が同じ数値のもの同士を一つの配列に整理して入れるということをやりたいと思っています。 200#0#2500#200#0

  • 解決済

    PHPのDBについて

    DBの勉強のため、書籍を読んでコードを書いているのですがうまく動きません tableの番号、商品名、単価は表示されるのですがその下が表示できません なぜでしょうか <?p

  • 解決済

    再確認入力用のメールアドレスと一致するかをチェックして異常があれば表示させたい

    登録フォームの一部ですが、異なるメールアドレスを入力してメールアドレスが一致してない表示を出させようとテストしてるのですが、うまくいきません。 全体のコードは載せることができ

  • 解決済

    多次元配列 操作

    お世話になります。 多次元配列があり、特定のキーの値から、新しく値を出力し、同じ配列に戻すということをしたいです。 イメージです。 Array ( [0]

  • 解決済

    【PHP】while文の複数条件

    基本的なことかもしれませんが、わからないのでご教授いただければなと思います。 whileの基本的な文法として コード 初期値; while(条件式){ A処理を実行する

  • 解決済

    クエリの作り方について

    APIをやってみようと思い、https://www.panzee.biz/archives/7484←こちらのサイトのサンプルコードを分解して一から何も見ずにやってみようと思ったの

  • 解決済

    連想配列でキーだけ取り出したい

    いつもこちらのサイトでは、お世話になっております。 phpの連想配列ついて、1つ質問させて下さい。  以下のコードで、キーだけ取り出したいのですが、 方法はありますで

  • 解決済

    PHP 配列 計算

    テストデータ $test[] = ['A', '1', '100', '2017-04-01', '09:00']; $test[] = ['A', '2', '150', '2

同じタグがついた質問を見る

  • PHP

    20408questions

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

  • MySQL

    5873questions

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

  • phpMyAdmin

    652questions

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