表名是数据。
列 - ' 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函数,但是我遇到了很多麻烦。我希望这是有道理的。
由于
答案 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