"GROUP BY"-Spalte als Parameter in Function übergeben

Hallo zusammen,

meine Frage ist mit Sicherheit recht trivial, allein ich finde keine Lösung, ich bin allerdings auch ein ziemlicher SQL-Anfänger.
Worum geht es? Ich habe eine Tabelle mit Anmeldungen (t_w) und eine Tabelle mit Gebietszuordnungen (t_gebiete). Die Tabelle “t_gebiete” enthält mehrere Spalten.
Ich möchte nun die Summe der Anmeldungen, gruppiert für jede der in “t_gebiete” vorhandenen Spalten erhalten. Die Tabelle ‘t_gebiete’ enthält aktuell die Spalten ‘farbe’ und ‘richtung’. Ich versuche nun eine Funktion zu schreiben, die als Parameter einen Spaltennamen der Tabelle “t_gebiete” übergeben bekommt und mir die entsprechenden Gruppensummen zurückliefert. Ich suche also nach einer Funktion, die ich so aufrufen kann:

select * from anmeldungen(‘farbe’);
select * from anmeldungen(‘richtung’);

[ Wahrscheinlich gibt es auch eine Lösung wo dies möglich wäre: select * from anmeldungen({‘farbe’, ‘richtung’}; ]

Nachfolgende habe ich zwei Funktionen geschrieben, die mit Ausnahme der Gruppierungsvariablen identisch sind. Wie müsste die Funktion aussehen, damit ich als Parameter den Namen der Gruppierungsvariablen übergeben kann??

Vielen Dank für jeden Tipp!
Patrick


DROP FUNCTION IF EXISTS anmeldungen_1();
CREATE FUNCTION anmeldungen_1() returns
table(gruppe character, anmeldungen numeric) as $$
SELECT
farbe as gruppe,
SUM(meldungen) as anmeldungen
FROM
public.t_gebiete,
public.t_w
WHERE
t_gebiete.idf = t_w.idf
GROUP BY
t_gebiete.farbe;
$$ language ‘sql’;

select * from anmeldungen_1();

DROP FUNCTION IF EXISTS anmeldungen_2();
CREATE FUNCTION anmeldungen_2() returns
table(gruppe character, anmeldungen numeric) as $$
SELECT
richtung as gruppe,
SUM(meldungen) as anmeldungen
FROM
public.t_gebiete,
public.t_w
WHERE
t_gebiete.idf = t_w.idf
GROUP BY
t_gebiete.richtung;
$$ language ‘sql’;

select * from anmeldungen_2();


Ja, Du könntest auch sagen, Du suchst dynamische Abfragen, und die Antwort ist auch einfach: EXECUTE <your_quer_string>, mehr: siehe Doku.


Andreas