의 하위 집합을 찾는 방법은? 동일한 쿼리에 대해 여러 개의 대답이있을 수 있습니다. 그들 모두를 어떻게 생성 할 것입니까? 한 가지 방법으로, 이것은 나에게도 배낭 문제처럼 보이지만, 나는 SQL로 같은 것을 표현하는 방법을 모릅니다.SQL 쿼리는이 테이블을 감안할 때 주어진 테이블
당신은 아마 웹 페이지
의 하위 집합을 찾는 방법은? 동일한 쿼리에 대해 여러 개의 대답이있을 수 있습니다. 그들 모두를 어떻게 생성 할 것입니까? 한 가지 방법으로, 이것은 나에게도 배낭 문제처럼 보이지만, 나는 SQL로 같은 것을 표현하는 방법을 모릅니다.SQL 쿼리는이 테이블을 감안할 때 주어진 테이블
당신은 아마 웹 페이지
당신은 재귀 CTE와 포스트 그레스에서이 작업을 수행 할 수있는 쿼리를
SELECT * FROM OrderDetails;
를 실행해야합니다,하지만 다량으로 비효율적 일 것입니다 :
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
)
다른 조합을 추가 할 수 있는지 여부에 관계없이 모든 조합을 원한다면 수량 제한 버전, 당신은 절
SELECT OrderID, SUM(Quantity) AS TotalItemsOrdered
FROM OrderDetails
GROUP BY OrderID
HAVING SUM(Quantity)<= 90
당신은 질문에 대한 링크에서 데이터를 추가 할 위치의 마지막을 제거 할 수 있습니다. 그런 다음 링크가 끊어지고 미래의 방문자에게 질문은 쓸모가 없습니다. –
SQL만으로 모든 가능한 솔루션을 생성 할 수 있다고 생각하지 않습니다. – user2864740
질문을 업데이트했습니다. – Rahul