1

浮かんだ質問があります。これは基本的なSQL用語で設定されていますが、その性質は純粋数学です(したがって、https://mathoverflow.netにもアクセスする必要があります)。

いくつかの理論データベースに6つのフィールドを持つテーブルがあり、すべて数値です。また、Field_1> Field_5、Field_4 = 3などの基本的な条件があり、合計7つの条件があります。少なくとも4つを満たすselectを作成する必要があります。

(cond_1 AND cond_2 AND cond_3 and cond_4)OR(...)などの多くの論理条件でlong selectを書き込むことは、7つの要素からの4つの組み合わせが140に等しいため、方法ではありません。多くの条件。

では、どのようにすればその簡略化された形式でselectを書くことができますか?

4

3 に答える 3

6

これを行う1つの方法は、行が満たす条件ごとに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

これには、短絡効果が発生しないように、各行のすべての条件を評価する必要があることに注意してください。ただし、これは単純であり、十分なパフォーマンスを備えている可能性があります。

MySQLを使用している場合、ブール結果は0または1に相当するため、CASEステートメントは必要ないため、これをはるかに簡単な方法で記述できます。

WHERE (condition1) + (condition2) + ... + (condition7) >= 4
于 2010-06-09T14:58:06.837 に答える
0

真の条件の合計を単純に足し合わせることができます。

CASE 
WHEN Field1 > Field5 THEN
    1
ELSE
    0
END
+
CASE
WHEN Field4 = 3 THEN
    1
ELSE
    0
END
+
etc
AS condition_sum

そして、condition_sum>threshholdでフィルタリングします。その大文字小文字の合計式の厄介さを、もう少し読みやすいコードの関数に入れることもできます。

于 2010-06-09T14:58:21.563 に答える
0

満たされている条件の数を単純に数えることをお勧めします。特定の構文は、使用しているデータベース管理エンジンによって異なりますが、MySQLでは次のようになります。

SELECT things
FROM places
WHERE IF(cond_1, 1, 0) + IF(cond_2, 1, 0) + IF(cond_3, 1, 0) + IF(cond_4, 1, 0) + IF(cond_5, 1, 0) >= 4;
于 2010-06-09T14:58:23.693 に答える