将一个表中的值与另一表中具有相同属性的值的平均值计算进行比较

Posted

技术标签:

【中文标题】将一个表中的值与另一表中具有相同属性的值的平均值计算进行比较【英文标题】:Compare values from one table with average calculation of value with same properties in other table 【发布时间】:2019-08-09 13:26:35 【问题描述】:

这里的第一篇文章...我正在尝试在过去 5 分钟内从 tableA 创建选择值,并将这些值逐行与另一个表中的平均值(值)进行比较。

例如:

表A

 id | time_stmp         | name    | location | value
-----------------------------------------------------
1   2019-08-09-13.20     name1      loc1        450   
2   2019-08-09-13.20     name2      loc2        550
3   2019-08-09-13.20     name3      loc3        480
4   2019-08-09-13.19     name4      loc4        420
5   2019-08-09-13.19     name5      loc5        50

tableB基本一样,只是values和time_stmp不同

表B

    id | time_stmp         | name    | location | value
-----------------------------------------------------
1  |2019-08-09-11.20   | name1   |  loc1    |   475   
2  |2019-08-09-11.00   | name2   |  loc2    |   525
3  |2019-08-09-10.40   | name3   |  loc3    |   435
4  |2019-08-09-10.20   | name4   |  loc4    |   256
5  |2019-08-09-10.00   | name5   |  loc5    |   420

现在,我想创建 select 语句,我将在过去 3 分钟内将 tableA 中的字段(值)与名称和位置相同的 tableB 的平均值进行比较。

我尝试了类似的方法:

    select
  ta.name,
  ta.location,
  ta.value from tableA ta 
                where ta.value < (select avg(value) from tableB tb
         inner join tableB tb on tb.name=ta.name and tb.location=ta.location)

但效果不太好……

输出只能是来自 tableA 的值,其中值小于完整第二个表的平均值。

有什么建议吗?

【问题讨论】:

如果您显示想要获得的结果会有所帮助。 【参考方案1】:

如果我理解正确:

select a.*
from table a 
where a.time_stamp > current_timestamp - 5 minute and
      a.value < (select avg(b.value)
                 from tableB b
                 where b.name = a.name and b.location = a.location
                );

为了提高性能,您需要在 tableB(name, location, value)tableA(time_stamp) 上建立索引。

【讨论】:

谢谢戈登。查询有效,但我需要使用时间执行,因为执行需要很长时间......

以上是关于将一个表中的值与另一表中具有相同属性的值的平均值计算进行比较的主要内容,如果未能解决你的问题,请参考以下文章

计算一个表中与另一表中的条件匹配的记录

更新查询以根据另一表中的值更改一个表中列的现有值

SQL语句 一个表的值与另一个表的字段一致,怎么把两一个表的值作为条件,限定查询的字段

仅当最小值小于另一表中的值时才在一个表中加入值 - 雪花

SQL 表中如何让某条记录的某个属性值与另一个表中的某条记录的某个属性值相关联

如何根据与另一个表中的值的比较来更新列