Auswahl des Minimums von zwei verschiedenen Werten

8

Ich arbeite an einer SQL-Auswahl, wo ich alle kleinsten Datensätze für eine ID bekommen muss. Mein Problem ist, dass, während ich dachte, dass mein Code funktionierte, er oft falsche Werte für andere Spalten zurückgab, offensichtlich wegen meines Versäumnisses, meine aggregierte Min-Funktion zu unterstützen. Hier ist mein Code.

%Vor%

Das möchte ich mit meinem Code tun.

  

Wählen Sie aus der Beispieltabelle die Mindestpunktzahl für jede einzelne Test- und Fächerkombination aus, für die der Schüler die ID # 94

hat

Hier sind zwei (stark modifizierte) Tabellen für das Beispiel (Ich habe alle Spaltennamen hier und auch in meinem Code geändert.

%Vor%

.

%Vor%

und die Ergebnisse sollten

sein %Vor%

Das Problem ist, ich bekomme die falschen Werte für die Semesterspalte (und alle anderen Spalten, die ich in meiner Live-Arbeit habe).

Da ich lange gebraucht habe, um nicht mit zu kommen, ist hier sql, um die zwei Beispieldatenbanken zu erstellen:

%Vor%

Ich wäre dankbar für irgendwelche Hinweise oder Tipps, es ist sehr peinlich, nur herauszufinden, dass Ihre Arbeit eine Woche nach dem Produktivstart falsch ist!

    
user1772115 24.10.2012, 19:41
quelle

7 Antworten

2

Dies sollte für Sie funktionieren:

%Vor%

Siehe SQL-Geige mit Demo

    
Taryn 24.10.2012, 19:53
quelle
4

Wenn Sie in MySQL ein Feld in die Auswahl aufnehmen und nicht in die Gruppe, erhalten Sie einen beliebigen Wert. In diesem Fall können Sie nicht einfach die Semester- und Test-ID in die Gruppe aufnehmen, da Sie die gewünschten Ergebnisse nicht erhalten.

Um dies zu erreichen, müssen Sie die Mindestpunktzahl für jeden Schüler, Test, Thema und dann wieder auf die ursprüngliche Tabelle finden

%Vor%

SQL Geige-Demo

Eine andere weniger konventionelle Methode besteht darin, sich selbst einer Ungleichung anzuschließen.

%Vor%

SQL Geige-Demo

Wenn Sie daran interessiert sind, einen Tiebreaker zu erstellen, fügen Sie einfach eine oder eine Bedingung hinzu

%Vor%

SQL-Geige-Demo Hinweis: Ich habe die Daten so geändert, dass sie eine Unentschieden-Situation enthalten

    
Conrad Frix 24.10.2012 19:52
quelle
1

Versuchen Sie diese Lösung:

%Vor%

SQL Fiddle Demo

    
Parado 24.10.2012 19:54
quelle
1

mit korrelierter Unterabfrage

%Vor%

Demo mit SQL Fiddle

    
moj 24.10.2012 20:34
quelle
1

Wenn zwei example_student_scores dasselbe Ergebnis haben, müssen Sie doppelte Einträge in der Ausgabe vermeiden. Min () würde Duplikate verursachen.

Eine ausgezeichnete Methode zur Ausführung der Aufgabe besteht in der Verwendung von Fensterfunktionen und row_number ().

Wenn Fensterfunktionen nicht verfügbar sind, könnte die folgende Methode zur Simulation der Funktion "Erste-einer-Gruppe" folgendermaßen aussehen:

%Vor%     
wildplasser 24.10.2012 20:03
quelle
0

Führt die folgende Abfrage das aus, was Sie wollen?

%Vor%     
Gordon Linoff 24.10.2012 19:54
quelle
0

Einfach SELECT und GROUP BY die Spalten, die Sie brauchen:

%Vor%

Wenn Sie eine Aggregationsfunktion für eine Spalte verwenden, müssen alle anderen Attribute in der SELECT-Klausel in der GROUP BY-Klausel enthalten sein.

Der Rest der Abfrage klingt gut für mich.

    
Yannick Chaze 24.10.2012 19:57
quelle

Tags und Links