我正在使用MySQL并从表中获取一些不同的值,然后对其执行一些基本的数学运算。目前正在使用三个单独的SELECT语句,然后我用Java中的输出执行一些简单的加法和减法。
我正在尝试优化我的代码,但遗憾的是我必须承认我是一个完整的SQL菜鸟。我很确定有一种方法可以加入这些选择的查询和计算,这样我实际上只得到一个输出但是我找不到它。
我的表看起来像这样:
ID | value | inc | timestamp
--------------------------------------
0 | 5 | 4 | 2018-02-01 10:28:21
1 | 8 | 3 | 2018-02-01 10:28:47
...
我的代码目前看起来像这样:
int maxValue = MySQL.executeQuery("SELECT MAX(`value`) AS value FROM `table` where ID = idvalue AND `timestamp` >= TIMESTAMPADD(DAY,-3,NOW())");
int minValue = MySQL.executeQuery("SELECT MIN(`value`) AS value FROM `table` where ID = idvalue AND `timestamp` >= TIMESTAMPADD(DAY,-3,NOW())");
int minInc = MySQL.executeQuery("SELECT `inc` FROM `table` where ID = id AND value = minValue");
int output = maxValue - minValue + minInc;
有没有办法将它缩短为单个
int output = MYSQL.executeQuery( ??? );
答案 0 :(得分:2)
只需select (select ...) - (select ...) + (select ...)
在您的情况下,您可以(不在真实环境中测试)
select (SELECT MAX(`value`) AS value FROM `table` where ID = idvalue AND `timestamp` >= TIMESTAMPADD(DAY,-3,NOW())) - ( SELECT MIN(`value`) AS value FROM `table` where ID = idvalue AND `timestamp` >= TIMESTAMPADD(DAY,-3,NOW())) + (SELECT `inc` FROM `table` where ID = id AND value = minValue)
答案 1 :(得分:0)
首先,maxValue
和minValue
选项会有一些时髦的事情发生。 Max()
和Min()
运算符将为您提供给定行集的给定列的最大值和最小值。使用这些特定where
的运算符之一(通过表格的主键)可能不是您想要做的。
现在,回答你的问题,我认为你可以采取以下措施:
SELECT MAX('value') as max, MIN('value') as min
FROM `table` as t
WHERE ...
要“加入”(小心这个词)前两个查询。这是一种简单的select
语法:通常,一次选择多个列或aggregate函数没有问题。或者,例如:
SELECT `inc`
FROM `table`
WHERE ID = id AND
value = (SELECT MIN('value') FROM 'table' WHERE ...)
“加入”最后两个。
答案 2 :(得分:0)
使用INNER JOIN
可以使用单个语句,因为您使用的是单个语句。试试这个
SELECT MAX(`a.value`)-(MIN(`a.value`)+b.`inc`) AS Output
FROM `table` a
INNER JOIN `table` b ON a.ID=b.ID
AND a.ID = idvalue AND `a.timestamp` >= TIMESTAMPADD(a.DAY,-3,NOW())
AND b.value=(select MIN(value) from table WHERE ID=id);