Seite 1 von 1
Fehler mit GROUP BY - Abfrage
Verfasst: Fr, 09.10.2009 22:15
von Niels
Im weiterem Knobeln über
dieses Problem habe ich mich mal etwas an Base heran gewagt. Leider nur bedingt erfolgreich.
Ich habe auf meine Testdaten einen View generiert, der die Daten sortiert aufbereitet. Nun wollte ich aus diesem View mittels GROUP BY über einen weiteren View die doppelte Einträge filtern:
Leider gibt es hier eine Fehlermeldung:
Code: Alles auswählen
SQL-Status: 37000
Fehler-Code: -67
Not in aggregate function or group by clause: org.hsqldb.Expression@198dc19 in statement [SELECT * FROM "Sortiert" GROUP BY "Lage"]
Eigentlich habe ich keine Aggregatfunktion in dem Query, allerdings in dem View, auf den ich zugreife, also habe ich den Query direkt auf meine Tabelle Import gesetzt, leider mit dem gleichen Ergebnis.
Was sagt mir dies nun?
Niels
Re: Fehler mit GROUP BY - Abfrage
Verfasst: Fr, 09.10.2009 23:17
von Barlee
Hallo Niels,
doppelte Einträge filtern
Das erreichst Du mit SELECT
DISTINCT * FROM ...
----
Zur Info: Die Meldung
besagt, dass eine Aggregatfunktion
vermisst wird (dazu zählen z.B. SUM(), COUNT(), AVG())
Gruß Barlee
Re: Fehler mit GROUP BY - Abfrage
Verfasst: Mo, 12.10.2009 11:49
von Niels
Hallo Barlee,
Danke für Deinen Input.
Barlee hat geschrieben:
doppelte Einträge filtern
Das erreichst Du mit SELECT
DISTINCT * FROM ...
Nicht ganz, denn DISTINCT * vergleicht den ganzen Datensatz und so habe ich in der Abfrage wieder alle Daten. Ich brauche jedoch keine doppelten Werte in der Spalte Lage, wobei hier immer der Datensatz genommen werden muss, der den kleinsten TSI hat. Nun kann ich vielleicht ein DISTINCT "Lage" machen, dann bekomme ich nur die Lagen. Nun könnte ich mit einer JOIN-Abfrage wieder die restlichen Werte in einem weiteren View dazu basteln. Erschwerend kommt dazu, dass der Wert TSI auch leer sein kann, aber der leere Wert als größter TSI zu werten ist. Die Standard-Sortierung nimmt ihn erst einmal als Kleinsten.
Meine Internetrecherche zeigte, dass immer wieder empfohlen wird, den DISTINCT zu umgehen
Barlee hat geschrieben:Zur Info: Die Meldung
besagt, dass eine Aggregatfunktion
vermisst wird (dazu zählen z.B. SUM(), COUNT(), AVG())
Sagt mir das also, dass ich GROUP BY nur mit Aggregat-Funktionen verwenden kann
Niels
Re: Fehler mit GROUP BY - Abfrage
Verfasst: Mo, 12.10.2009 13:19
von Barlee
Hallo Niels,
Ausgehend von Deiner Calc-Tabelle soltest Du so die richtigen Datensätze selektieren können.
Ggf joinst Du noch weitere Spalten hinzu.
Code: Alles auswählen
SELECT Code, MIN(Lage) AS MIN_TSI FROM Deine_Tabelle GROUP BY Code
Code z.B. 1-1-23-15, Lage z.B. 3, <NULL> usw.
Ist es das, was Du suchst?
Gruß Barlee
Re: Fehler mit GROUP BY - Abfrage
Verfasst: Mo, 12.10.2009 14:18
von Niels
Hi Barlee,
Barlee hat geschrieben:Ist es das, was Du suchst?
Jo, fast! Ich habe da jetzt ein
Code: Alles auswählen
SELECT "Lage", MIN( "Lage" ) AS "MIN_Lage" FROM "Import" AS "Import" GROUP BY "Lage"
erfolgreich getestet. Nun möchte ich jedoch wieder alle Spalten haben. Ein
Code: Alles auswählen
SELECT "Lage", "TSI", MIN( "Lage" ) AS "Min_Lage" FROM "Import" AS "Import" GROUP BY "Lage"
enthält wieder keine Aggregat-Funktion
Niels
Re: Fehler mit GROUP BY - Abfrage
Verfasst: Mo, 12.10.2009 14:26
von Barlee
Hallo Niels,
enthält wieder keine Aggregat-Funktion
Korrekt, denn
muss
heissen.
Gruß Barlee
Re: Fehler mit GROUP BY - Abfrage
Verfasst: Mo, 12.10.2009 16:10
von Niels
Schade, die originale Tabelle enthält doch ein par mehr Spalten
Aber mit
Code: Alles auswählen
SELECT MIN( "Lage" ) AS "Min_Lage", "TSI" FROM "Import" AS "Import" GROUP BY "Lage", "TSI"
bin ich schon einen Schritt weiter. Allerdings wird nicht unbedingt der Record mit dem kleinsten TSI/Lage gegriffen, sondern wieder alle, weil die TSI's ja unterschiedlich sind.
Ich habe mal kurz in MySQL getestet, da geht auch
Niels