mysql选择具有最大总和的记录,给出其他值的约束

时间:2014-11-02 23:06:54

标签: mysql sum max constraints

我环顾四周,但也许我没有使用正确的术语。

我有一个包含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 |

1 个答案:

答案 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