鉴于此表:
http://www.w3schools.com/sql/trysql.asp?filename=trysql_func_sum
如何生成OrderIds列表,其中数量总和最多为90.如何在SQL中表达相同的内容?同一查询可以有多个答案。你将如何产生它们?在某种程度上,这看起来像背包问题,但我不知道如何在SQL中表达相同。
您可能需要执行查询
SELECT * FROM OrderDetails;
在网页
中答案 0 :(得分:0)
SELECT OrderID, SUM(Quantity) AS TotalItemsOrdered
FROM OrderDetails
GROUP BY OrderID
HAVING SUM(Quantity)<= 90
答案 1 :(得分:0)
您可以使用递归CTE在Postgres中执行此操作,但效率会非常低:
With Recursive search_orders(maxid, quantity, used) AS (
Select
od.OrderDetailsID,
od.quantity,
array[od.OrderDetailsID]
from
OrderDetails od
Where
quantity < 90
Union All
Select
od.OrderDetailsID,
sod.quantity + od.quantity,
used || od.OrderDetailsID
From
OrderDetails od,
search_orders sod
Where
od.OrderDetailsID > sod.maxid and
od.quantity < 90 - sod.quantity
)
Select
used,
quantity
From
search_orders sod
Where
not exists (
select 'x'
from
OrderDetails od
Where
Not od.OrderDetailsID = Any(used) and
od.quantity < 90 - sod.quantity
)
如果您想要所有组合,无论您是否可以在不超过数量限制的情况下添加其他项目,您都可以删除最后一个where子句
<强> Example SQL Fiddle 强>