MySQL Wie erstelle ich diese Unterabfrage?

8

Ich habe die folgenden Tabellen

Table Farm

%Vor%

Table Gate

%Vor%

Tabellenursprung

%Vor%

Tischvorrat

%Vor%

Tabellenergebnisse

%Vor%

Annotierte Ergebnistabelle: Wie oben ^

%Vor%

Erforderliche Berechnungen:

  • Type kann höchstens drei Werte haben: {H, M, L};
  • Wenn alle Werte vorhanden sind, werden sie wie folgt bewertet: H = 70 M = 20 L = 10
  • ALLE einzigartigen Fälle sind

  • Fall {H, M}: H = 80 M = 20

  • Fall {M, L}: M = 60 L = 40
  • Fall {H, L}: H = 90 L = 10
  • Fall {H}: H = 100
  • Fall {M}: M = 100
  • Fall {L}: L = 100
  • Fall {H, M, L}: H = 70 M = 20 L = 10

Weitere Erklärung

  • Nur Lager mit mindestens eins GATE , voll zufrieden können 100 Punkte erhalten
    1. Beispiel: Q4 hat 3 Sätze von 6 GATES ; Nur ein GATE Satz muss satsifiziert werden (eine Punktzahl haben).
    2. Die vorhandenen Punkte müssen mit dem jeweiligen Fall multipliziert werden Beispiel: Q4 hat den Fall {H, M, L} was H = 70 bedeutet; M = 20; L = 10 Dies würde zu (70 * 100%) + (20 * 50%) + (10 * 100%) = 90 führen (siehe oben in den Annotationen der Ergebnistabelle)
    3. 2.
  • Punkte sollten immer noch berücksichtigt und berücksichtigt werden, auch wenn ein Tor nicht vollständig befriedigt wurde. Das Tor mit MAX-Punkten sollte beibehalten werden, wenn keine Tore vollständig erfüllt wurden. (Wird eine weitere Erklärung geben, wenn nicht verstanden)

Wenn wir eine Abfrage ausführen, um den Tabellen und Daten einen Sinn zu geben, wird sie wie folgt aussehen

%Vor%

Wunschergebnisse

%Vor%

Da origin eine stock hat, die aus 3 verschiedenen farms besteht und diese farms jede 6 gates . Solange ein gate -set (numerisch übereinstimmend gates ) mit einem Wert von SOME bewertet wird, können wir den gesamten gefundenen STOCK vollständig berücksichtigen. Nur so kann ein stock als 100 betrachtet werden.

Darüber hinaus und um es noch einmal zu sagen: STOCK Q4 hat Fall: {H, M, L} und% gate (4) wurde bis zu einem gewissen Grad gefunden. gate 4 hat die Punktzahl (100% * H) + (50% * M) + (100% * L) was gleich (70 * 100%) + (20 * 50%) + (10 * 100%) = ist 90

Daher: (Von oben genommen)

%Vor%

QED

Was ich also mit brauche, ist die Erstellung der Unterabfrage / Subselect, damit diese Berechnung funktioniert. Ich habe alles in dem obigen Szenario (zusammen mit einer laufenden Abfrage, mit der ich gearbeitet habe) im folgenden SQL-Fiddle-Link eingerichtet.

Vielen Dank stackoverflow Community.

& gt; Das obige Problem in SqlFiddle finden Sie hier & lt;

    
thatDudeThatDoesThatThing 25.03.2012, 19:20
quelle

2 Antworten

4

Hier ist die Abfrage, an der ich gearbeitet habe. Die Ergebnisse unterscheiden sich jedoch geringfügig von denen, die Sie in Ihrer Frage gepostet haben:

%Vor%

Ergebnis:

%Vor%

Lass es mich wissen, wenn das den Trick macht.

    
Mosty Mostacho 25.03.2012 19:48
quelle
1

Ich würde Ihre ursprüngliche Abfrage nehmen, um die zweitletzte Tabelle zu erhalten und die Select zu ändern, indem Sie distinct hinzufügen (gefunden hier ) und wählen Sie nur Herkunft, Bestand und die Berechnung für den Score. Wenn der Score zum Beispiel der Durchschnitt aller Werte ist, wäre dies AVG(Score) , wobei Score das wäre, was Sie in der ursprünglichen Abfrage abgerufen haben. Wenn Sie nur eine kleine Teilmenge der Elemente mit demselben Ursprung und demselben Bestand verwenden möchten, um den Score zu berechnen, würde ich eine Unterabfrage verwenden, bei der die Herkunfts- und Stick-IDs in der Auswahl übereinstimmen:

%Vor%

Hoffe, das hilft.

    
Kyra 22.03.2012 20:46
quelle

Tags und Links