Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL,如何选择两个值之和最小的行_Mysql_Select - Fatal编程技术网

MySQL,如何选择两个值之和最小的行

MySQL,如何选择两个值之和最小的行,mysql,select,Mysql,Select,这是我的桌子: mysql> SELECT * FROM tms; +----+---------------------+------+-------+-------+-------+ | ID | tid | tse1 | tse2 | bse1 | bse2 | +----+---------------------+------+-------+-------+-------+ | 1 | 2017-01-01 00:00:00 | -75

这是我的桌子:

mysql> SELECT *  FROM tms;
+----+---------------------+------+-------+-------+-------+
| ID | tid                 | tse1 | tse2  | bse1  | bse2  |
+----+---------------------+------+-------+-------+-------+
|  1 | 2017-01-01 00:00:00 | -757 | -1052 | -4200 |  -940 |
|  2 | 2017-01-01 01:00:00 | -752 | -1058 | -4175 |  -882 |
|  3 | 2017-01-01 02:00:00 | -754 | -1068 | -4112 |  -906 |
|  4 | 2017-01-01 03:00:00 | -754 | -1057 | -4135 |  -905 |
|  5 | 2017-01-01 04:00:00 | -766 | -1066 | -4140 |  -911 |
|  6 | 2017-01-01 05:00:00 | -767 | -1084 | -4156 |  -916 |
|  7 | 2017-01-01 06:00:00 | -763 | -1092 | -4225 |  -924 |
|  8 | 2017-01-01 07:00:00 | -756 | -1086 | -4322 |  -973 |
|  9 | 2017-01-01 08:00:00 | -779 | -1105 | -4415 |  -989 |
| 10 | 2017-01-01 09:00:00 | -781 | -1114 | -4459 |  -985 |
| 11 | 2017-01-01 10:00:00 | -778 | -1124 | -4579 | -1009 |
| 12 | 2017-01-01 11:00:00 | -783 | -1134 | -4691 | -1010 |
+----+---------------------+------+-------+-------+-------+
现在我想要bse1+bse2具有最低值的行。在我的例子中,ID为3,值为-5018

我以为这样就行了,但运气不好

mysql> SELECT id,MIN(bse1+bse2) FROM tms;
ERROR 1140 (42000): In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'testmaxsum.tms.ID'; this is incompatible with sql_mode=only_full_group_by
SQL完全是新手,所以请不要对我太苛刻。

您可以使用子查询:

SELECT * FROM tms 
WHERE bse1+bse2 =
(SELECT MIN(bse1+bse2) FROM tms)

您需要计算
Select
子句中的bse\u和
bse1+bse2
),并按bse\u和值的升序计算结果,然后使用
LIMIT 1
获得最低的条目(升序中的第一个条目)

请尝试以下操作:

SELECT id, (bse1 + bse2) as bse_sum 
FROM tms 
ORDER BY bse_sum ASC LIMIT 1

为了完善已经给出的答案,我将给出一个在MySQL版本8+上工作的选项。我们可以在此处尝试使用
RANK
分析函数:

SELECT ID
FROM
(
    SELECT *, RANK() OVER (ORDER BY bse1 + bse2 DESC) rank
    FROM tms
) t
WHERE rank = 1;

这种方法还有一个额外的优点,即它将返回所有恰好与
bse1+bse2
总和的最大值相关的记录


演示更改了您的数据集,使两条记录的总和最大。

这种问题可能是设计不佳的症状。如果这种性质的查询很频繁,可能会使用这两列的总和添加另一列。这也应该可以通过“视图”来完成,
CREATE view view name AS SELECT
blah blah blah blah blah blah。注意:从我运行的演示中,似乎
ID=3
具有最大的
bse1+bse2
,而不是最小的总和。