Fehler mit GROUP BY - Abfrage

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Niels
*****
Beiträge: 212
Registriert: Mi, 16.06.2004 06:46
Wohnort: Heikendorf

Fehler mit GROUP BY - Abfrage

Beitrag 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:

Code: Alles auswählen

SELECT * FROM "Sortiert" GROUP BY "Lage"
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
Dateianhänge
Test.odb
(2.67 KiB) 66-mal heruntergeladen
Wer lesen kann ist klar im Vorteil.
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Fehler mit GROUP BY - Abfrage

Beitrag von Barlee »

Hallo Niels,
doppelte Einträge filtern
Das erreichst Du mit SELECT DISTINCT * FROM ...

----
Zur Info: Die Meldung

Code: Alles auswählen

Not in aggregate function or group by clause: ...
besagt, dass eine Aggregatfunktion vermisst wird (dazu zählen z.B. SUM(), COUNT(), AVG())

Gruß Barlee
Niels
*****
Beiträge: 212
Registriert: Mi, 16.06.2004 06:46
Wohnort: Heikendorf

Re: Fehler mit GROUP BY - Abfrage

Beitrag 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

Code: Alles auswählen

Not in aggregate function or group by clause: ...
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 :shock:

Niels
Wer lesen kann ist klar im Vorteil.
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Fehler mit GROUP BY - Abfrage

Beitrag 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
Niels
*****
Beiträge: 212
Registriert: Mi, 16.06.2004 06:46
Wohnort: Heikendorf

Re: Fehler mit GROUP BY - Abfrage

Beitrag 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 :evil:

Niels
Wer lesen kann ist klar im Vorteil.
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Fehler mit GROUP BY - Abfrage

Beitrag von Barlee »

Hallo Niels,
enthält wieder keine Aggregat-Funktion
Korrekt, denn

Code: Alles auswählen

GROUP BY "Lage"
muss

Code: Alles auswählen

GROUP BY "Lage", "TSI"
heissen.

Gruß Barlee
Niels
*****
Beiträge: 212
Registriert: Mi, 16.06.2004 06:46
Wohnort: Heikendorf

Re: Fehler mit GROUP BY - Abfrage

Beitrag 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

Code: Alles auswählen

select * from table group by SpalteX
Niels
Wer lesen kann ist klar im Vorteil.
Antworten