我在表格中有30個記錄,其中有「箱號」和「重量」欄。 我必須在30個箱子中找到20個箱子,其總重量最接近1000千克。用於查找總重量的SQL查詢
3
A
回答
2
SQL服務器:
select TOP 20 box_number
from t_boxes
group by box_number
order by ABS(SUM(box_weight) - 1000) ASC
編輯: 在情況下,我誤解你的問題,你真的想解決揹包問題。 這是你真的應該在SQL中做的事情,但你可以閱讀this文章,用非常合適的名稱:現在完全不適合使用SQL Server。
5
我建議你閱讀有關Knapsack problem
0
你會解決這個問題的SQL不推薦的方式,甚至可能沒有任何一臺機器上是可行的。但是,你可以表達蠻力解決方案:
select box1.id, box2.id, . . . ,
(box1.weight + box2.weight + . . .)
from box box1 join
box box2
on box2.id > box1.id join
box box3
on box3.id > box2.id join
box box4
on box4.id > box3.id
. . .
box box20
on box20.id > box19.id
order by abs(1000 - (box1.weight + box2.weight + . . .))
「ON」的條件保證你正在尋找在各組的箱子一次,通過其獨特的ID進行排序。使用「連接」而不是「左連接」可以確保最終有20個盒子。
相關問題
- 1. 總查詢的SQL查詢
- 2. SQL查詢 - 查找重複的字段
- 3. 用於統計總時間量的SQL查詢
- 4. 用於查找4個連續值的總和的SQL Server查詢
- 5. 彙總SQL查詢?
- 6. 總SQL Server查詢
- 7. sql查詢找到總百分比
- 8. SQL查詢找到如下總
- 9. SQL Server查詢查找重複記錄加入查詢
- 10. 查找值組成的彙總查詢
- 11. 用於查找與大多數朋友的人的SQL查詢?
- 12. 查找SQL查詢瓶頸
- 13. SQL查詢來查找列
- 14. 用於查找兩次差異的MS SQL查詢?
- 15. 用於查找表中新記錄百分比的SQL查詢
- 16. 用於查找下一個版本號的SQL查詢
- 17. 用於查找值系列長度的SQL查詢
- 18. 用於查找電子郵件地址域的SQL查詢
- 19. Sql用於查找銷售趨勢的查詢
- 20. 用於在子網中查找IP地址的SQL查詢
- 21. 用於查找最大稅率的SQL查詢
- 22. 用於在表中查找最新活動的SQL查詢
- 23. 對於重複客戶的SQL查詢
- 24. 查詢重複項的SQL子查詢
- 25. 帶查詢重複值的SQL查詢
- 26. 用於查找圖中邊緣權重的MySQL查詢
- 27. C#:查找涉及給定一個SQL查詢變量SQL查詢
- 28. SQL總和查詢問題
- 29. SQL查詢計算總
- 30. sql查詢;總和字段
你使用什麼sql引擎? BTW搜索'揹包問題SQL'的一些提示,因爲它不會是微不足道的:) – biziclop 2012-07-27 10:05:00
即時通訊使用SQL服務器 – 2012-07-27 10:08:33
爲什麼你需要使用SQL?編程語言更適合於這樣的問題。您的問題缺少[示例代碼](http://sscce.org/)(這裏是SQL語句)。請爲[samples]使用CREATE TABLE和INSERT ... VALUES(http://weblogs.sqlteam.com/jeffs/archive/2008/05/13/question-needed-not-answer.aspx)。所需的結果不需要作爲示例代碼呈現,因爲結果是代碼的輸出,而不是代碼本身。 – outis 2012-07-27 10:09:39