Frage zu: GROUP BY

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

_Alain_
*
Beiträge: 11
Registriert: Sa, 08.09.2007 14:10

Frage zu: GROUP BY

Beitrag von _Alain_ »

Hallo allerseits

Versuche eine Abfrage mit "GROUP BY" zu sortieren.

Folgender Code funktioniert:

Code: Alles auswählen

SELECT SUM ("Rezeptzusammenstellung"."Menge") 
FROM "Rezeptzusammenstellung"
GROUP BY "Rezeptzusammenstellung"."ZutatenID" 
...sobald ich aber eine weitere Tabelle miteinbeziehe erhalte ich eine Fehlermeldung:

Code: Alles auswählen

SELECT SUM ("Rezeptzusammenstellung"."Menge"), "Zutaten"."Zutatenname" 
FROM "Rezeptzusammenstellung", "Zutaten"
GROUP BY "Rezeptzusammenstellung"."ZutatenID" 
Fehlermeldung:
SQL-Status: 37000
Fehler-Code: -67

Not in aggregate function or group by clause: org.hsqldb.Expression@15fc40c in statement [SELECT SUM ("Rezeptzusammenstellung"."Menge"), "Zutaten"."Zutatenname"
FROM "Rezeptzusammenstellung", "Zutaten"
GROUP BY "Rezeptzusammenstellung"."ZutatenID"
]

Weiss jemand was ich falsch mache bzw. wie ich über mehrere Tabellen ein "GROUP BY" verwenden kann ?

Bei der normalen SQL-Sprache geht das ja auch (siehe http://sql.1keydata.com/de/sql-join.php) und müsste doch in HSQL auch gehen oder ?

Gruss
Alain
Dateianhänge
Bildschirminhalt erfassen-1.jpg
Bildschirminhalt erfassen-1.jpg (46.64 KiB) 771 mal betrachtet
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Frage zu: GROUP BY

Beitrag von DPunch »

Aloha
_Alain_ hat geschrieben:Bei der normalen SQL-Sprache geht das ja auch (siehe http://sql.1keydata.com/de/sql-join.php) und müsste doch in HSQL auch gehen oder ?
Wenn Du Dir auf der gleichen Seite noch
http://sql.1keydata.com/de/sql-group-by.php
anschaust, sollte Dir auffallen, warum Deine Abfrage nicht nur bei HSQL falsch ist, sondern auch "bei der normalen SQL-Sprache".

Code: Alles auswählen

SELECT SUM ("Rezeptzusammenstellung"."Menge"), "Zutaten"."Zutatenname"
FROM "Rezeptzusammenstellung", "Zutaten"
WHERE "Rezeptzusammenstellung"."ZutatenID" = "Zutaten"."ID"
GROUP BY "Rezeptzusammenstellung"."ZutatenID", "Zutaten"."Zutatenname"
_Alain_
*
Beiträge: 11
Registriert: Sa, 08.09.2007 14:10

Re: Frage zu: GROUP BY

Beitrag von _Alain_ »

Vielen Dank DPunch !

Es funktioniert.
Jetzt hab ich glaub auch den Syntax verstanden von GROUP BY :-)

Gruss
Alain
_Alain_
*
Beiträge: 11
Registriert: Sa, 08.09.2007 14:10

Re: Frage zu: GROUP BY

Beitrag von _Alain_ »

Jetzt hab ich das auf eine etwas komplexere Abfrage angewendet und es hat anfänglich auch funktioniert.

Nachdem ich via Formular einige Werte in Tabellen eingefügt bzw. gelöscht habe funktioniert die Abfrage nicht mehr bzw. es zeigt mir immer das gleiche Abfrageresultat an obwohl das Abfrageresultat eigentlich je nach ausgewähltem Datensatz ändern sollte (was es zuvor ja auch tat).

Habe ja an der Abfrage selbst nichts verändert, deshalb versteh ich nicht weshalb nun die Abfrage auf einmal nicht mehr funktioniert.

Weiss jemand wo der Fehler (ausser in meinem Gehirn ;-)) liegen könnte ?


Gruss
Alain
_Alain_
*
Beiträge: 11
Registriert: Sa, 08.09.2007 14:10

Re: Frage zu: GROUP BY

Beitrag von _Alain_ »

Hab wohl das SQL Schlüsselwort "GROUP BY" noch nicht wirklich verstanden.

Ich verstehe nicht weshalb trotz Anweisung nicht nach "Rezeptzusammenstellung"."ZutatenID" gruppiert wird (siehe Anhang).

Weiss jemand wo der Fehler zu suchen ist ?


Gruss
Alain
Dateianhänge
Bildschirminhalt erfassen-2.jpg
Bildschirminhalt erfassen-2.jpg (82.36 KiB) 716 mal betrachtet
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Frage zu: GROUP BY

Beitrag von DPunch »

Aloha
_Alain_ hat geschrieben:Ich verstehe nicht weshalb trotz Anweisung nicht nach "Rezeptzusammenstellung"."ZutatenID" gruppiert wird (siehe Anhang).
Es wird nach "ZutatenID" gruppiert - allerdings auch nach "AuftragsID" und da dort unterschiedliche Werte vorkommen, können diese Zeilen logischerweise nicht gruppiert / zusammengefasst werden.
_Alain_
*
Beiträge: 11
Registriert: Sa, 08.09.2007 14:10

Re: Frage zu: GROUP BY

Beitrag von _Alain_ »

Hallo DPunch

Danke, klingt logisch wenn du das sagst :-) Es sprengt wohl z. Z. die Grenzen meiner Intelligenz/ Vorstellungskraft das GROUP BY Schlüsselwort wirklich zu verstehen.
Nichts desto trotz möchte ich weiterprobieren bis das gewünschte Ergebnis erreicht ist.

Was ich beim GROUP BY Schlüsselwort nicht verstehe ist: Warum muss ich alle ausser die arithmetischen Anweisen aus dem SELECT-Abschnitt auch in GROUP BY aufführen ?
Ich will ja eigentlich gar nicht noch nach "AuftragsID", "Zutatenname" etc. gruppieren sondern nur nach "ZutatenID".

Aber wenn ich die restlichen Spalten nicht im Schlüsselbegriff GROUP BY aufführe erscheint ein Error.

Zudem möchte ich im Formular den Wert "Auftragzusammenstellung"."AuftragsID" (aus der Abfrage) mit dem Wert "Auftraege"."ID" verknüpfen damit die Abfrage jeweils nur auf den in der Tabelle des Formulars ausgewählen Datensatz angewendet wird.
Oder reichen die Bedinungen die ich in der WHERE Anweisung drin habe ?


Gruss
Alain
_Alain_
*
Beiträge: 11
Registriert: Sa, 08.09.2007 14:10

Re: Frage zu: GROUP BY

Beitrag von _Alain_ »

Habe jetzt die ganze Abfrage nochmals im Entwurfsmodus aufgebaut und siehe da jetzt geht's auf einmal.

Hier die beiden Codevarianten (ausser der Reihenfolge der Bedingungen und Statements kann ich keinen Unterschied feststellen):

Code: Alles auswählen

//Funktionierende Variante

SELECT "Zutaten"."Zutatenname", SUM( "Rezeptzusammenstellung"."Menge" * "Auftragzusammenstellung"."Anzahl_Personen" ), "Einheiten"."Einheitenname", "Auftragzusammenstellung"."AuftragsID" 

FROM "Auftragzusammenstellung" AS "Auftragzusammenstellung", "Auftraege" AS "Auftraege", "Rezeptzusammenstellung" AS "Rezeptzusammenstellung", "Zutaten" AS "Zutaten", "Einheiten" AS "Einheiten" 

WHERE "Auftragzusammenstellung"."AuftragsID" = "Auftraege"."ID" AND "Rezeptzusammenstellung"."ZutatenID" = "Zutaten"."ID" AND "Zutaten"."EinheitenID" = "Einheiten"."ID" AND "Rezeptzusammenstellung"."RezeptID" = "Auftragzusammenstellung"."Auftrag_RezeptID" 

GROUP BY "Zutaten"."Zutatenname", "Einheiten"."Einheitenname", "Auftragzusammenstellung"."AuftragsID" 

ORDER BY "Zutaten"."Zutatenname" ASC




//Nicht funktionierende Variante

SELECT "Zutaten"."Zutatenname", SUM ( "Auftragzusammenstellung"."Anzahl_Personen" * "Rezeptzusammenstellung"."Menge" ), "Auftragzusammenstellung"."AuftragsID" , "Einheiten"."Einheitenname"

FROM "Rezeptzusammenstellung" AS "Rezeptzusammenstellung", "Zutaten" AS "Zutaten", "Auftragzusammenstellung" AS "Auftragzusammenstellung", "Auftraege" AS "Auftraege", "Einheiten" AS "Einheiten"

WHERE "Auftraege"."ID" = "Auftragzusammenstellung"."AuftragsID" AND "Auftragzusammenstellung"."Auftrag_RezeptID" = "Rezeptzusammenstellung"."RezeptID" AND "Rezeptzusammenstellung"."ZutatenID" = "Zutaten"."ID" AND "Zutaten"."EinheitenID" = "Einheiten"."ID"

GROUP BY "Zutaten"."Zutatenname" , "Einheiten"."Einheitenname", "Auftragzusammenstellung"."AuftragsID"

ORDER BY "Zutaten"."Zutatenname" ASC
Frage: Die Reihenfolge der Bedingungen sollte doch keine Rolle spielen oder ?

Gruss
Alain
Antworten