[英]selecting the minimum amount records where the sum is greater than a certain number
我正在嘗試為餐廳預訂系統匯總一個查詢。 這樣的想法是,如果沒有足夠大的桌子來容納聚會的人數,那么可以瀏覽其他空閑桌子,找到兩個足夠大的桌子,可以放在一起以容納聚會的人數。
理想情況下,我希望能夠選擇最少的桌子以與聚會的規模盡可能地匹配。
例如,如果有一個要求有十二個表的請求,那么我想理想地找到六個表中的兩個,並且不再有。
這是我嘗試過的查詢,但給出的結果為空
select tbl_id, sum(max_seats) as sumseats from tbl_list
group by tbl_id having sumseats> 11
我已經鏈接到sql小提琴以顯示表結構
嘗試以下類似的方法(除了MySQL外,您還需要類似PHP的方法):
代碼:
$bookedTables = array();
while ($requiredCapacity > 0) {
$query = "SELECT * FROM (SELECT tbl_id, max_seats FROM tbl_list WHERE max_seats > $requiredCapacity)table1 ORDER BY table1.max_seats ASC";
$result = mysql_query($query);
if (count($result)!=0) {
array_push($bookedTables, $result[0]['tbl_id'];
$requiredCapacity = $requiredCapacity - $result[0]['max_seats'];
}
else {
$query = "SELECT * FROM (SELECT tbl_id, max_seats FROM tbl_list)table1 ORDER BY table1.max_seats DESC";
if (count($result)!=0) {
array_push($bookedTables, $result[0]['tbl_id'];
$requiredCapacity = $requiredCapacity - $result[0]['max_seats'];
}
else {
echo "No more tables left";
break;
}
}
}
我並沒有提議將其作為一個明確的答案,但需要考慮一下...
SELECT * FROM tables;
+----+------+
| id | size |
+----+------+
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
| 5 | 4 |
| 6 | 4 |
| 7 | 4 |
| 8 | 6 |
| 9 | 6 |
| 10 | 8 |
+----+------+
SELECT *
, x.size + y.size + z.size pax
FROM tables x
LEFT
JOIN (SELECT * FROM tables UNION SELECT 0,0) y
ON y.size < x.size OR (y.size = x.size AND y.id < x.id)
LEFT
JOIN (SELECT * FROM tables UNION SELECT -1,0) z
ON z.size < y.size OR (z.size = y.size AND z.id < y.id)
HAVING pax >= 12
ORDER
BY pax
, x.size DESC
, y.size DESC
, z.size DESC
LIMIT 1;
+----+------+------+------+------+------+------+
| id | size | id | size | id | size | pax |
+----+------+------+------+------+------+------+
| 10 | 8 | 7 | 4 | -1 | 0 | 12 |
+----+------+------+------+------+------+------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.