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!
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%Eine andere weniger konventionelle Methode besteht darin, sich selbst einer Ungleichung anzuschließen.
%Vor%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
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%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.
Tags und Links sql mysql aggregate-functions