2014-11-02 73 views
2

我环顾四周,但也许我没有使用正确的术语。mysql选择其他值约束最大的记录

我有一个表格,有4列,我想根据对其他列的约束找到'优化'一列总和的记录子集。我基本上想通过MySQL来模拟Excel的'求解器'加载项。 (1)总价格'< = 600和(2)最多只有2个'价值',而(2)最多只有2个任何特定“类型”值(例如,A的B,C的,D和E的总和),每个值都为<。

我试过使用运行计数,但这并没有让我走得太远。任何指导非常感谢。

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

也请提供清晰的期望的结果。其实我不知道你想做什么。你的要求表明,每个品牌可以有多个A和B等等,但就我所知,即使有两个记录也没有品牌。 – fancyPants 2014-11-02 23:48:37

回答

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