将一个表中的值与另一表中具有相同属性的值的平均值计算进行比较
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语句 一个表的值与另一个表的字段一致,怎么把两一个表的值作为条件,限定查询的字段