我环顾四周,但也许我没有使用正确的术语。
我有一个包含4列的表格,我想找到优化'的记录子集。一列总和,基于对其他列的约束。我基本上想模仿Excel' solver'通过MySQL加载项。
例如,在下表中,我想选择总计为最大总数的6个品牌'价值'而(1)总价格为' < = 600和(2)具有至多2个特定的'类型'价值(例如,A&的B&C,C&C,D&#39和S< =< = 2)的总和。
我已尝试使用跑步计数,但这并没有让我走得太远。非常感谢任何指导。
Brand | Type | Price | Value |
Chrysler | A | 93 | 46.8 |
Ford | D | 98 | 46.3 |
Oldsmobile | C | 92 | 45.6 |
Saturn | D | 89 | 45.6 |
Plymouth | A | 104 | 45.3 |
Toyota | E | 90 | 42.6 |
Honda | C | 89 | 39.8 |
Subaru | C | 90 | 38.9 |
Jeep | C | 70 | 37.8 |
Buick | B | 73 | 36.4 |
Cadillac | A | 83 | 35.4 |
Nissan | A | 77 | 34.6 |
Cherry | E | 71 | 34.6 |
Fiat | E | 75 | 33.5 |
Mercedes | B | 79 | 33.3 |
Lexus | A | 81 | 31.9 |
BMW | B | 71 | 30.2 |
Volvo | B | 72 | 29.3 |
Peugot | E | 58 | 29.1 |
Kia | C | 59 | 28.2 |
Audi | E | 59 | 27.9 |
Volkswagen | B | 63 | 26.9 |
Mitsubishi | C | 61 | 26.6 |
Chevrolet | A | 71 | 25.3 |
Acura | B | 57 | 24.5 |
答案 0 :(得分:0)
这是一种使用表格(!!)的六向自连接,一次比较六行的所有组合的方法。这会找到总价格低于600的最高价值组合。(请注意,价格低于600的约束根本不是数据集中的约束,因为没有单个价格超过100)。 http://sqlfiddle.com/#!2/33fba/15/0
对不起,我没有得到你正在尝试用As,Bs,Cs等做的事情。
SELECT SUM(a.price+b.price+c.price+d.price+e.price+f.price) AS price,
SUM(a.value+b.value+c.value+d.value+e.value+f.value) AS value,
a.brand AS a, b.brand AS b, c.brand AS c,
d.brand AS d, e.brand AS e, f.brand AS f
FROM t AS a
JOIN t AS b ON a.Brand < b.Brand
JOIN t AS c ON b.Brand < c.Brand
JOIN t AS d ON c.Brand < d.Brand
JOIN t AS e ON d.Brand < e.Brand
JOIN t AS f ON e.Brand < f.Brand
GROUP BY a.brand, b.brand, c.brand, d.brand, e.brand, f.brand
HAVING SUM(a.price+b.price+c.price+d.price+e.price+f.price) <= 600
ORDER BY SUM(a.value+b.value+c.value+d.value+e.value+f.value) DESC
LIMIT 10