将多个SELECT查询和一些简单计算连接到一个查询中

时间:2018-02-02 10:33:23

标签: java mysql sql

我正在使用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( ??? );

3 个答案:

答案 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)

首先,maxValueminValue选项会有一些时髦的事情发生。 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);