平均值和计数条件 - mysql

时间:2017-01-18 08:43:28

标签: mysql sql phpmyadmin

表名是数据。

列 - ' date',' location,' fp,' TV'

在日期之下,我将有多个不同的日期,但每个日期都有多个具有相同日期的行。与位置相同。

我想在每次日期和位置相同且fp = 1时计算出电视的平均值,并将结果插入名为avgdiff的新列

所以我可能会有一些日期为2016-12-08和位置LA的行,在fp和电视下有不同的数字。因此,当日期为2016-12-08且位置为LA时,fp可能等于1,4次,而这4行的TV可能为7.4,8.2,1,-2。所以平均值为3.65。

我认为我需要在条件下使用avg和count函数,但是我遇到了很多麻烦。我希望这是有道理的。

由于

2 个答案:

答案 0 :(得分:0)

您可以使用GROUP BY

查询平均值
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

答案 1 :(得分: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