2011-07-11 9 views
1

MySQLを使用してn行のグループの平均値を取得しようとしています。MySQLでn行のグループの平均を取得

私は、次の形式の列で構成されるMySQLテーブル(data_conso)を持っています。 id(int);日付(datetime);データ(int)

私は100を表現するグループでこれらの値をすべて分割し、これらの各グループの平均値を取得したいと思います。検索と工夫のビットで

は、私は次のクエリを記述するために管理:

理論的に働くだろう(あるいは、少なくとも私は、なぜそれがないだろうかわからない)だけを返す
SET @i := 0; 
SELECT 
    @i:[email protected]+1 as rownum, 
    FLOOR(@i/100) AS `datagrp`, 
    AVG(`tmptbl`.`data`) 
FROM (
    SELECT `data` 
    FROM data_conso ORDER BY `date` ASC 
) as `tmptbl` 
GROUP BY `datagrp` 

一つの価値! AVG()関数をtmptblの周りに置いておけば、私は非常に奇妙です。 dataの場合、平均値を持たないグループをすべて返します。

私が理解できないのは、集計関数であるAVG()が計算を行うためにGROUP BYを使用しない理由です。

私はこの問題に本当に不満を持ち、どんな種類の助けも本当に感謝しています。 私の英語のために私を許し、あなたの答えのために事前に感謝!

答えて

3
SET @i := 0; 
SELECT AVG(`date`), AVG(`data`) 
FROM 
(
    SELECT 
     @i:[email protected]+1 as rownum, 
     FLOOR(@i/100) AS `datagrp`, 
     `date`, 
     `data` 
    FROM data_conso 
    ORDER BY `date` ASC 
) 
GROUP BY `datagrp`; 

何かが動作するはずです期待通りに動作しない選択 式リストに値を割り当てられている変数を参照することを意味します元のテーブルに列datagrpを追加してから、各datagrpの平均を選択することをお勧めします。

+0

また、期間別にグループ化することもできます。時間平均を取得するには、「SELECT AVG(日付)、AVG(データ)FROM data_conso GROUP BY CEIL((date)/ 3600」を使用します。 – tera

+0

ありがとう、これは私のために働いた。 madflowが正しかったようで、私の問題は問題でした。私はまた、100行のグループを持っているためにそれを-1に初期化しました(私がしなかった場合には99のグループしか作成しませんでした)。私は数日で日付でグループ化のあなたのアイデアを使用します、私はあなたを掲載し続けるよ! – Aweb

0

GROUP BY datagrpをGROUP BY tmptblに変更してみてください。 data

SET @i := 0; 
SELECT 
    @i:[email protected]+1 as rownum, 
    FLOOR(@i/100) AS `datagrp`, 
    AVG(`tmptbl`.`data`) 
FROM (
    SELECT `data` 
    FROM data_conso ORDER BY `date` ASC 
) as `tmptbl` 
GROUP BY `tmptbl`.`data` 
+0

まず、お返事ありがとうございます。 問題は、GROUP BY 'datagrp'が100行のグループを作ることができることです。私はその平均を作るために必要です。 – Aweb

0

ちょうど推測です。試してみるとどうなりますか:

SET @i := 0; 
SELECT 
    floor((@i := @i + 1)/100) AS `datagrp`, 
    AVG(`tmptbl`.`data`) 
FROM (
    SELECT `data` 
    FROM data_conso ORDER BY `date` ASC 
) as `tmptbl` 
GROUP BY `datagrp` 
0

この文書はあなたの問題のようです。 SELECT文で

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

、各選択式は がクライアントに送信された場合にのみ評価されます。これは BY句HAVING、GROUP BY、またはORDERで、そのような

+0

あなたはテラの質問が私のために働いていたのを見て、正しい方法で行ったかもしれないと思います。ありがとう! – Aweb

関連する問題