从M可用中选择哪个满足至少N个条件

Dan*_*iev 1 sql database logic discrete-mathematics

有一个问题浮出水面.它是用基本的SQL术语设置的,但它的本质是纯数学(所以也许我也应该访问http://mathoverflow.com).

我在一些理论数据库中有一个表,有6个字段,都是数字.我们还有基本条件,例如Field_1> Field_5,Field_4 = 3等,总共7个条件.我需要编写一个select,它至少满足4个.

写入looooooooooooooooooooooooooong选择具有许多逻辑条件,例如(cond_1 AND cond_2 AND cond_3和cond_4)OR(...)不是一种方式,因为7个元素的4组合等于140,并且一个不想写很多条件.

那么如何以简化形式编写选择?

Mar*_*ers 6

一种方法是对行满足的每个条件计数1,并将总和与目标值进行比较:

SELECT * 
FROM yourtable
WHERE (
          (CASE WHEN condition1 THEN 1 ELSE 0 END) +
          (CASE WHEN condition2 THEN 1 ELSE 0 END) +
          ...
          (CASE WHEN condition7 THEN 1 ELSE 0 END)
      ) >= 4
Run Code Online (Sandbox Code Playgroud)

请注意,这将需要评估每一行的所有条件,这样您就不会产生短路效果,但它很简单,也许它具有足够好的性能.

如果您正在使用MySQL,您可以用更简单的方式编写它,因为布尔结果等于0或1,因此您不需要CASE语句:

WHERE (condition1) + (condition2) + ... + (condition7) >= 4
Run Code Online (Sandbox Code Playgroud)