3

我有一个包含 7 个真/假列的表,如何选择所有有 2 个或更多列设置为真的行?

这是我到目前为止所拥有的:

select count(*), c1,c2,c3,c4,c5,c6,c7
from members
where
1 in (c1,c2,c3,c4,c5,c6,c7);
4

3 回答 3

6

真/假列只是一个 1 位整数。除非您存储的值不是 0 和 1 或者该列可以为空,否则您只需添加列并检查结果是否 >= 2

SELECT * FROM members WHERE c1 + c2 + c3 + c4 + c5 + c6 + c7 >= 2

如果有一些非 0 和非 1 条目,您应该事先更正它。如果它们可以为 NULL,则需要使用WHERE IFNULL(c1, 0)...

于 2013-05-21T14:24:58.340 回答
3

您可以尝试以下操作:

SELECT * FROM members WHERE c1+c2+c3+c4+c5+c6+c7>=2

于 2013-05-21T14:24:50.453 回答
1

由于 true 为 1,因此您可以计算字段总数为 more => 2。

SELECT * FROM members WHERE c1+c2+c3+c4+c5+c6+c7 >= 2

于 2013-05-21T14:28:54.843 回答