带条件的平均值和计数-mysql

带条件的平均值和计数-mysql,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,表名是数据 列-“日期”、“位置”、“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 我想我需要在条件下使用avg和计数函数,但

表名是数据

列-“日期”、“位置”、“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

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


谢谢

您可以使用
分组依据
查询平均值:

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

如果出于任何原因,无法避免将聚合数据存储在同一个表中(从而引入冗余和可能不正确/非最新的值),请执行以下形式的update语句:

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

为可以动态计算的数据创建新列通常不是一个好主意。将聚合数据存储在同一个表中绝对没有意义。请提供一个更好的示例
data
是一个完全没有意义的表名。谢谢,这确实有效。但我想将数据存储在表中的原因是,我可以在另一个查询中使用该答案。显然这不是最好的方法,但我刚刚开始学习这一点,这让事情变得更容易far@accord您仍然可以在另一个查询中使用它。将其存储在同一表的另一列中意味着您必须复制组中每一行的平均值。那是一个糟糕的桌子设计。是的,我没有理由把它放在同一张桌子上。我创建了另一个名为“ratings”的表,并创建了avgtv列。如何将上述查询存储在评级表中?获取此错误消息#1054-字段列表中的未知列“t.avgtv”@accord抱歉,已修复。感谢您的回复。这同样有效,但正如你和希莫塞尔所说,我没有理由把它放在同一张桌子上。因此,我们必须开始学习将查询存储在另一个表中