Frage

gibt es eine Frage schwebte. Es ist in grundlegenden SQL Begriffe gesetzt, aber die Natur ist reine Mathematik (so vielleicht sollte ich besuchen http://mathoverflow.com auch).

Ich habe eine Tabelle mit 6 Feldern in einigen theoretischen Datenbank haben, sind alle Zahlen. Auch haben wir Rahmenbedingungen, wie Field_1> Field_5, Field_4 = 3 usw., 7 Bedingungen insgesamt. Ich brauche eine Auswahl zu schreiben, die erfüllt mindestens 4 von ihnen.

Schreiben looooooooooooooooooooooooooong mit vielen logischen Bedingungen wählen wie (cond_1 UND cond_2 UND cond_3 und cond_4) OR (...) ist keine Art und Weise, weil 4-Kombination aus 7 Elementen ist gleich 140 und man möchte nicht so viele Bedingungen schreiben.

Wie schreibe ich ein in seiner vereinfachten Form wählen?

War es hilfreich?

Lösung

Eine Möglichkeit, es zu tun, ist für jede Bedingung zählen 1, dass die Reihe erfüllt und die Summe auf Ihren Zielwert vergleichen:

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

Beachten Sie, dass dies für jede Zeile alle Bedingungen Auswertung benötigen, so dass Sie keine Kurzschlusswirkung erhalten, aber es ist einfach und vielleicht hat es gut genug Leistung für Sie.

Wenn Sie MySQL verwenden können Sie diese in eine viel einfachere Art und Weise schreiben, weil ein boolean Ergebnis auf 0 äquivalent ist oder 1, so dass Sie die CASE-Anweisungen nicht benötigt werden:

WHERE (condition1) + (condition2) + ... + (condition7) >= 4

Andere Tipps

Sie können einfach die Summe der wahren Verhältnisse fügen zusammen, a la

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

und Filter auf condition_sum> Schwelle. Man könnte sogar die Bösartigkeit dieses Summe von Fällen Ausdruck in eine Funktion für leicht lesbaren Code setzen.

würde ich vorschlagen, einfach zu zählen, wie viele Bedingungen erfüllt sind. Die besondere Syntax ist davon abhängig, welche Datenbank-Management-Engine Sie verwenden, aber in MySQL wäre es so etwas wie folgt aussehen:

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top