hawkmaster: GROUP BY mehrere Spalten

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

  1. 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

    --
    Ich spreche Spaghetticode - fließend.
    1. 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

      --
      Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
      1. 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

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Laus und Lauschaer Glas.