实际问题是关于优化缓存数据库,我已将其重新表述为一个简单的场景:
汽车经销商想要摆脱旧车,并将它们列在桌子上出售:
| Car_Number | Car_Year | Car_Price |
|------------|-----------|-----------|
|1001........|1967.......|29000......|
|1002........|1930.......|29050......|
|1003........|2001.......|30000......|
|1004........|1980.......|10000......|
|1005........|1967.......|75000......|
|1006........|2005.......|80000......|
|1007........|1995.......|21000......|
|1008........|1920.......|55000......|
客户希望在固定预算范围内选择最大数量的汽车,旧车比新车更受欢迎,或者如果两辆车同年,那么车辆数量较旧。
我目前唯一可以考虑这个问题的方法是获取一个排序视图,并在循环中手动累加价格,直到总和达到预算限制。然后,返回添加的汽车数量列表。
上述场景所需的最小SQL命令集是什么?
答案 0 :(得分:1)
查找所有未超出预算的汽车:
SELECT Car_Number, Car_Year
FROM Cars c
WHERE (SELECT SUM(Car_Price)
FROM Cars
WHERE Car_Year < c.Car_Year
OR (Car_Year = c.Car_Year AND Car_Number <= c.Car_Number)
) <= :Budget