2017-01-18 25 views
0

テーブル名はdataです。条件付き平均とカウント - mysql

列 - 「日付」、「場所」FP、 『テレビ』

日付の下で私は、複数の異なる日付を持っていますが、それぞれの日付が同じ日付で行数を持っています。場所と同じです。

私は毎回日付と場所のためにテレビの平均を仕事にしようとしていますが、同じとFP = 1であり、だから私は数を持っているかもしれません

avgdiffと呼ばれる新しい列に結果を挿入します日付2016-12-08とロケーションLAを持つ行.fpとTVの下に異なる数字が表示されます。したがって、日付が2016-12-08で、場所がLAの場合、fpは1,4回になり、これらの4行のTVは7.4、8.2、1、-2になる可能性があります。したがって平均は3.65です。

私は条件付き平均とカウント関数を使用する必要があると思いますが、これには多くの問題があります。私はこれが理にかなってほしい。

あなたはGROUP BYを使用して平均を照会することができますおかげ

+0

その場で計算できるデータの新しい列は、通常は新しい列には悪い考えです。集計データを同じテーブルに格納するのは間違いありません。 – shmosel

+1

より良い例を提供してください – hering

+0

'data'は全く意味のないテーブル名です。 – shmosel

答えて

0

SELECT `date`, `location`, AVG(`TV`) AS `avgtv` 
    FROM `data` 
WHERE `fp` = 1 
GROUP BY `date`, `location` 

(私は強く反対をお勧めします)、あなたの計算された平均と別のテーブルを更新するには、上記でUPDATE...JOINを使用することができますサブクエリとして:

UPDATE ratings r 
    JOIN (/* paste above query here */) t 
    ON t.date = r.date AND t.location = r.location 
    SET r.avgtv = t.avgtv 
+0

ありがとう、それは動作します。しかし、テーブルにそのデータを格納する理由は、別のクエリでその答えを使用できることです。明らかにそれが最善の方法ではありませんが、私はこれを学び始めたばかりです。これで今までのことがより簡単になりました。 – accord

+0

@accord別のクエリで引き続き使用できます。同じテーブルの別の列に格納すると、グループ内の各行の平均を複製する必要があります。それはひどいテーブルデザインです。 – shmosel

+0

はい私は同じテーブルに保存する理由はありません。私は 'ratings'と呼ばれる別のテーブルを作成し、カラムavgtvを作成しました。上記のクエリをレーティングテーブルに保存するにはどうすればよいですか? – accord

0

何らかの理由で、集約されたデータを同じテーブルに格納しないようにすることはできません。次の形式の更新ステートメントを実行してください:

update data, 
    (select t2.location, t2.date, avg(t2.TV) as avgTV2 
    from data t2 
    where t2.fp = 1 
    group by t2.location, t2.date) aggValues 
set avgTV = avgTV2 
where data.location = aggValues.location 
    and data.date = aggValues.date 
    and data.fp = 1 
+0

あなたのお返事ありがとうございます。これは同様に機能しますが、あなたとshmoselが言ったように、私が同じテーブルに格納する理由はありません。だから、別のテーブルにクエリを格納する方法を学ぶ必要があります – accord

関連する問題