0

实际问题是关于优化缓存数据库,我将其重新表述为一个简单的场景:

一位汽车经销商想要摆脱旧车,并在表格中列出待售:

| 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 命令集是什么?

4

1 回答 1

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
于 2012-10-26T04:43:58.987 回答