我很难找到解决此问题的简单方法。
您可以假设 UNIQUE KEY (A, B, C, D, E)
.
我正在尝试 SELECT
上表中的所有行,这样对于 C, D, E
的每个唯一组, 我想要 A, B
这样 A + B <=
所有其他 A + B
该特定组的组合 C, D, E
.
因此执行 SELECT
以上数据应该产生(如果是平局,选择第一个):
如果我要 GROUP BY C, D, E
, 列 A, B
是任意选择的(技术上首先 A, B
由数据库内部遇到)。
如果这是关系代数,我会将关系与其自身交叉连接,选择哪里 C, D, E
在“两个”关系中都是平等的,其中 A + B
来自一份关系的副本大于A + B
另一个副本,然后从原始关系中减去结果。
不过我认为,在 MySQL
中有一种更简单的方法可以做到这一点.该表可能有数千组 C, D, E
, 每组包含 5 到 10 A, B
.我不相信 CROSS JOIN
会非常有效。
最佳答案
这样做的一种方法是为 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
关于mysql - 为组选择最小列总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34421683/