我很难找到解决这个问题的简单方法。
您可以假设UNIQUE KEY (A, B, C, D, E)
。
我正在尝试SELECT
上表中的所有行,以便对于C, D, E
的每个唯一群组,我希望A, B
使A + B <=
所有其他A + B
C, D, E
1}} {}}}特定组的组合。
因此,对上述数据执行SELECT
应该会产生(在平局的情况下,选择第一个数据):
如果我是GROUP BY C, D, E
,则A, B
列是任意选择的(技术上,数据库内部遇到A, B
)。
如果这是关系代数,我会交叉加入与自身的关系,选择C, D, E
相等的位置&#39;两者都是&#39;关系和关系的一个副本的A + B
大于另一个副本的A + B
,然后从原始关系中减去结果。
我想,在MySQL
中有一种更简单的方法。该表可能包含数千个C, D, E
组,每组包含5到10个A, B
。我不相信CROSS JOIN
会非常有效。
答案 0 :(得分:4)
这样做的一种方法是为c
,d
,e
的每个组合选择最小值,然后将其与表格上的查询相结合:
SELECT mytable.*
FROM mytable t
JOIN (SELECT c, d, e, MIN(a + b) AS min_ab
FROM mytable
GROUP BY c, d, e) s ON t.c = s.c AND
t.d = s.d AND
t.e = s.e AND
t.a + t.b = s.min_ab