MySQL:获取最小的项目集,其中总和(值)大于给定的数字
我遇到了一个新的/特殊的问题,我无法找到一个好的解决方案,也许有人有想法 下表:MySQL:获取最小的项目集,其中总和(值)大于给定的数字,mysql,select,sum,set,Mysql,Select,Sum,Set,我遇到了一个新的/特殊的问题,我无法找到一个好的解决方案,也许有人有想法 下表: | id | value | --------------- | … | … | | 11 | 500 | | 12 | 300 | | 13 | 200 | | 14 | 400 | | 15 | 300 | --------------- | id | value | --------------- | … | … | | 11 | 450 |
| id | value |
---------------
| … | … |
| 11 | 500 |
| 12 | 300 |
| 13 | 200 |
| 14 | 400 |
| 15 | 300 |
---------------
| id | value |
---------------
| … | … |
| 11 | 450 |
---------------
现在我需要选择(然后删除/更新)这些条目,直到达到给定值(1250),所以在“魔术”之后,我需要如下表:
| id | value |
---------------
| … | … |
| 11 | 500 |
| 12 | 300 |
| 13 | 200 |
| 14 | 400 |
| 15 | 300 |
---------------
| id | value |
---------------
| … | … |
| 11 | 450 |
---------------
是否有很好的可能性(性能问题)?(如果选择查询,那么其他两个应该更容易)
我发现了一些使用subselect(w/o limit…)和“where sum()的解决方案
为了简单起见,下面的查询假设ID是连续的,但是可以很容易地扩展到不连续的情况
SELECT a.id
, LEAST(a.value,a.value-i) value
FROM my_table a
JOIN
( SELECT *
, @i:=@i-value i
FROM my_table
, ( SELECT @i:=1250) vars
ORDER
BY id DESC
) b
ON b.id = a.id + 1
AND a.value - i >= 0;
+----+-------+
| id | value |
+----+-------+
| 10 | 700 |
| 11 | 450 |
+----+-------+