GROUP BY mehrere Spalten
hawkmaster
- datenbank
Hallo zusammen,
Unten stehende Abfrage mit "Group By A.unitynumber" liefert mir bei MySQL das gewünschte Ergebnis.(Zwei Datensätze)
Bei SQLite liefert die gleiche Abfrage in der gleichen Tabelle nur einen Datensatz.
Ich weiss man sollte alle Spalten im SELECT auch im GROPU BY berücksichtigen.
Wenn ich dies jedoch so machen würde:
"Group By A.unitynumber,A.projectid ,A.customername,A.customernumber,A.rating,B.contractstart"
würden wiederum alle Datensätze angezeigt.
Gibt es hierfür überhaupt eine Lösung, wenn man wie im Beispiel mehrere Spalten braucht aber nur nach der unitynumber gruppieren möchte?
SELECT
A.projectid,A.unitynumber,A.customername,A.customernumber,A.rating,B.contractstart
FROM
project A
JOIN
unity B ON B.unitynumber = A.unitynumber
WHERE
userid = 83
GROUP BY
A.unitynumber
ORDER BY
A.unitynumber ASC
vielen Dank und viele Grüße
hawk
Moin,
Unten stehende Abfrage mit "Group By A.unitynumber" liefert mir bei MySQL das gewünschte Ergebnis.(Zwei Datensätze)
Bei SQLite liefert die gleiche Abfrage in der gleichen Tabelle nur einen Datensatz.
Das liegt an der verschiedenen Interpretation der DBMS. Eigentlich dürfte dieses Statement gar nicht ausgeführt werden. Ich weiß beispielsweise, dass Oracle und MSSQL rummeckern, wenn man gruppiert, und eine Spalte weder in der Gruppierung ist, noch innerhalb von einer Aggregat-Funktion.
Gibt es hierfür überhaupt eine Lösung, wenn man wie im Beispiel mehrere Spalten braucht aber nur nach der unitynumber gruppieren möchte?
Welche Felder genau brauchst du, und welche nicht? Das ist die Frage. Ich kann aus deinem Statement nicht richtig erkennen, welchen Anwendungsfall du hast, aber als Faustregel kannst du dir merken: Wenn etwas gruppiert wird, muss jedes selektierte Feld entweder mit gruppiert werden, oder in einer Aggregat-Funktion stehen.
Wenn du uns verrätst, was für Daten dahinter stehen, kann dir auch noch weiter geholfen werden.
Grüße Marco
Hi,
Eigentlich dürfte dieses Statement gar nicht ausgeführt werden. Ich weiß beispielsweise, dass Oracle und MSSQL rummeckern, wenn man gruppiert, und eine Spalte weder in der Gruppierung ist, noch innerhalb von einer Aggregat-Funktion.
Das kann man MySQL auch beibringen, ist dort eine Konfigurationsfrage – aber per Default ignoriert MySQL diesen Verstoß gegen den SQL-Standard und liefert für die betroffenen Spalten einfach Werte aus einem „zufälligen“ Datensatz innerhalb der Gruppe zurück.
Wenn du uns verrätst, was für Daten dahinter stehen, kann dir auch noch weiter geholfen werden.
Ja, plus Datenmodell und Beispieldaten nebst erwartetem Ergebnis bitte.
Wer es den Helfern besonders einfach machen möchte, legt in so einem Fall ein SQL Fiddle mit Beispieldaten an.
MfG ChrisB
Om nah hoo pez nyeetz, ChrisB!
Wer es den Helfern besonders einfach machen möchte, legt in so einem Fall ein SQL Fiddle mit Beispieldaten an.
Danke für den Link.
Matthias