鉴于此表:
http://www.w3schools.com/sql/trysql.asp?filename=trysql_func_sum
我将如何生成数量总和最多为 90 的 OrderId 列表。如何在 SQL 中表达相同的内容?同一个查询可以有多个答案。你将如何生成它们?在某种程度上,这对我来说也像是背包问题,但我不知道如何在 SQL 中表达相同的意思。
您可能需要执行查询
SELECT * FROM OrderDetails;
在网页中
鉴于此表:
http://www.w3schools.com/sql/trysql.asp?filename=trysql_func_sum
我将如何生成数量总和最多为 90 的 OrderId 列表。如何在 SQL 中表达相同的内容?同一个查询可以有多个答案。你将如何生成它们?在某种程度上,这对我来说也像是背包问题,但我不知道如何在 SQL 中表达相同的意思。
您可能需要执行查询
SELECT * FROM OrderDetails;
在网页中
您可以在 Postgres 中使用递归 CTE 执行此操作,但这将非常低效:
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 子句
SELECT OrderID, SUM(Quantity) AS TotalItemsOrdered
FROM OrderDetails
GROUP BY OrderID
HAVING SUM(Quantity)<= 90