选择组的最小列数

时间:2015-12-22 17:50:31

标签: mysql sql database select database-design

我很难找到解决这个问题的简单方法。

您可以假设UNIQUE KEY (A, B, C, D, E)

Data Sample

我正在尝试SELECT上表中的所有行,以便对于C, D, E的每个唯一群组,我希望A, B使A + B <=所有其他A + B C, D, E 1}} {}}}特定组的组合。

因此,对上述数据执行SELECT应该会产生(在平局的情况下,选择第一个数据):

enter image description here

如果我是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会非常有效。

1 个答案:

答案 0 :(得分:4)

这样做的一种方法是为cde的每个组合选择最小值,然后将其与表格上的查询相结合:

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