Hallo,
ich befasse mich zz. grundsätzlicher mit
SQL. Dabei geht es mir nicht um eine konkrete Abfrage. Vielmehr versuche ich, ein Beispiel zu konstruieren, das zu einer bestimmten Bedingung passt bzw. diese Bedingung verletzt.
Bei
GROUP BY gibt es laut Doku* u.a. folgende
Einschränkung:
Zitat von
EmbedSql.pdf:
For each SELECT clause in a
query, including subqueries, there can only be one GROUP BY clause.
Unter diesen Umständen verstehe ich nicht, warum folgende Abfrage funktioniert:
SQL-Code:
select ID, Kurzbezeichnung, Ort,
(
select count(*)
FROM Mitarbeiter mit
where mit.Abteilung_id = abt.Id /* Verknüpfung über ForeignKey */
group by mit.Abteilung_id
) as Anzahl
from Abteilungen abt
group BY id, Kurzbezeichnung, Ort;
Beide GroupBy-Klauseln haben durch die Where-Bedingung natürlich keine praktische Bedeutung. (Alternative Abfragen mit JOIN wären sowieso einfacher.) Aber ich wundere mich.
Andere Versuche, z.B. "group by Ort", führen nur zum Standardfehler, dass Spalten der Select-Liste im group by nicht enthalten sind.
Danke für Erläuterungen! Jürgen
* Als Ersatz für eine Firebird-Doku benutze ich vorwiegend die pdf-Dateien von Interbase 7.5, die ich mit Delphi 2005 erhielt. In der aktuellen
Firebird-Doku gibt es keine Angaben zu dieser Einschränkung.