Seite 1 von 1
Frage zu: GROUP BY
Verfasst: So, 26.12.2010 10:32
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
Re: Frage zu: GROUP BY
Verfasst: Mo, 27.12.2010 11:24
von DPunch
Aloha
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"
Re: Frage zu: GROUP BY
Verfasst: Di, 28.12.2010 07:52
von _Alain_
Vielen Dank DPunch !
Es funktioniert.
Jetzt hab ich glaub auch den Syntax verstanden von GROUP BY
Gruss
Alain
Re: Frage zu: GROUP BY
Verfasst: Di, 28.12.2010 09:42
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
Re: Frage zu: GROUP BY
Verfasst: Di, 28.12.2010 16:53
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
Re: Frage zu: GROUP BY
Verfasst: Di, 28.12.2010 17:03
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.
Re: Frage zu: GROUP BY
Verfasst: Mi, 29.12.2010 06:29
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
Re: Frage zu: GROUP BY
Verfasst: Sa, 01.01.2011 10:03
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