我有一个餐桌名称"食物",有各种不同卡路里的食物。例如:吼叫:
表:食物
id name calories
-----------------------
1 beef 200
2 tomato 400
3 carrot 500
4 nuts 800
我想要的:当卡路里的总和达到一定量时,我想根据卡路里量选择表中的多种食物,我想停止查询并回显结果。例如,当我想要600卡路里时,结果将显示前两个食物200 + 400 = 600。当我想要卡路里限制将是1000,它将需要任何两个或更多的食物,那些卡路里量达到1000或接近1000。 我尝试使用以下代码来制作它;但它不起作用。
"SELECT * FROM foods WHERE SUM(calories)=1000 "
我感谢专家的帮助
答案 0 :(得分:1)
您可以使用变量来计算累积总和:
SELECT id, name, calories
FROM (
SELECT id, name, calories,
@cumSum:= @cumSum + calories AS cumSum
FROM foods, (SELECT @cumSum:=0) var
ORDER BY id ) t
WHERE cumSum <= 600
子查询计算累积总和并将其值存储在@cumSum
变量中。然后,外部查询可以使用计算列cumSum
来过滤掉累积总和大于600的结果。
<强>输出:强>
id name calories
----------------------
1 beef 200
2 tomato 400