SQL组合具有所有列的特定值的行

时间:2016-12-01 14:01:46

标签: sql

数据:

    |c1 |c2 |c3 |c4 |c5 |c6
----|---|---|---|---|---|--
r1  |1  |0  |0  |1  |0  |0
----|---|---|---|---|---|--
r2  |1  |1  |0  |0  |0  |0
----|---|---|---|---|---|--
r3  |0  |0  |1  |0  |1  |0
----|---|---|---|---|---|--
r4  |0  |1  |0  |1  |1  |1

我想使用SQL查找行/行组合,其中所有列都具有特定值(即1)。

因此,从样本数据中我们应该得到r4和(r2,r3或r1,r3)作为组合。 至少没有。覆盖所有列的行。

编辑:行数约为10-12。 并且所有列的值均为0和1。 使用列的总和,我们可以获得覆盖最大列的第一个参考行。 我无法弄清楚如何处理剩下的部分。

行可以具有列值0,在这种情况下,列具有值1的另一行将作为组合被拾取。因此,对于r4,应选择(r3和r2)或(r1和r3)作为组合。 对于r4列,c1和c3为0。 所以r1和r3可以用r4作为组合来选择。

1 个答案:

答案 0 :(得分:0)

因此,您希望alls列中组合的最小行数为1。最佳情况是1排。最坏的情况是与列数相同的行数。

我会说这在单独的sql中很难(不可能)。您可以使用最高值为1的行。

SELECT a.rowNumber, a.valueCount FROM (
    SELECT rowNumber, SUM(col1, col2, col3, ...) as valueCount FROM tableName; ) as a
ORDER BY a.valueCount DESC
-- LIMIT 1

如果您只想要一行,请使用限制。其余的不能在一个查询中完成 - 至少不是没有将sql拉伸到一些荒谬的距离。即使这样,这也不是一个容易解决的问题。因为具有hightest valueCount的行可能不是最佳使用行。