HSQLDB und GROUP BY

Piffmaster

Cadet 4th Year
Registriert
Nov. 2007
Beiträge
97
Hallo,

ich verwende eine HSQLDB mit folgender Testtabelle:

Name: test
Spalte: id (AutoValue)
Spalte: Name (String)
Spalte: Gehalt (Int)

Jetzt will ich folgenden SQL Querry ausführen:

SELECT * FROM test GROUP BY Name

Erhalte folgende Fehlermeldung:

Not in aggregate function or group by clause: org.hsqldb.Expression@7fb1d3 in statement [SELECT * FROM test GROUP BY name]

Wenn ich die Abfrage in einer MySQL Datenbank teste, funktioniert alles. Wo liegt der Fehler?

Wenn ich meinen SQL etwas abänder:

SELECT name, sum(gehalt) FROM test GROUP BY name

Dann funktioniert es auch in der HSQLDB. Wenn ich bei einer HSQLDB ein GROUP BY machen will, brauch ich da eine sum Funktion?

Vielen Dank im Voraus.

Mit freundlichen Grüßen

Piffmaster
 
Hallo,

danke für deine Antwort, werde ich mal checken.

Komisch finde ich nur, wenn ich zum Beispiel:

SELECT id, Name, sum(Gehalt) FROM test GROUP BY Name

ausführe, dann bekomme ich wieder die gleiche Fehlermeldung. Wenn ich aus dem SELECT das Feld id entferne, dann funktioniert es wieder.

Auch wenn ich weitere Spalten wie zum Beispiel Wohnort mit einfüge, bekomme ich die gleiche Fehlermeldung.

Irgendwie stehe ich aufn Schlauch :) MySQL funktioniert es soweit, da kann ich GROUP BY auch ohne Aggregatsfunktion verwenden - ist hier HSQLDB anders?

Ich werde aber mal DISTINCT versuchen.

Mit freundlichen Grüßen

Piffmaster
 
Uff das kann schon sein. SQL ist ja nur eine Abfragesprache die jede Datenbank selbst interpretiert und wie sie es tut unterscheidet sich halt.
 
Code:
SELECT id, Name, sum(Gehalt) FROM test GROUP BY Name

Natürlich funktioniert das ohne "id", schließlich sagst du ja auch nicht, was mit der id passieren soll. Wenn du das mit in die GROUP BY-Klausel aufnimmst, also "GROUP BY id, Name", dann geht das sicher auch wieder, nur dass dann wahrscheinlich nichts gruppiert wird, weil die id wohl der Primärschlüssel und somit Einzigartig ist.

Dass es in MySQL funktioniert, ist purer Wahnsinn von MySQL. Es dürfte nicht funktionieren und entspricht keinem Standard.
 
Sollte das wirklich in MySQL funktionieren hält sich MySQL tatsächlich an keinen Standard.

Für JEDE ausgegebene Spalte muss eine Aggregatsfunktion (Sum, Min, Max usw.) genutzt werden bis auf die Spalte(n) nach der man gruppiert.
 
Zurück
Oben