Guten Abend,
im Rahmen einer Hausaufgabe müssen wir mit PLPGSQL eine Funktion schreiben, die folgendes erledigen soll:
"Schreiben Sie eine Funktion occupancy die berechnet , wer mit wem wie viel Mal in einem Doppelzimmer übernachtet hat. Beachten Sie dabei, dass die Mitglieder in unterschiedlicher Reihenfolge genannt werden können, d.h. Müller als mitglied1 und Schulze als mitglied2 ist dasselbe wie Schulze als mitglied1 und Müller als mitglied2. Die Kombinationen können mit race notice auf dem Bildschirm ausgegeben werden. Beachten Sie dabei, dass jede Kombination nur 1 Mal ausgegeben wird."
Hier sind auch die folgenden Tabellenscripte (ohne Datensätze):
Mein erster Ansatz bestand darin, dass ich die oben fett gedruckte Bedingung ebenfalls versuche, mit SQL abzuhandeln. Das ist leider fürchterlich in die Hose gegangen. Mein momentaner SQL Query berechnet zwar, wer wie oft mit anderen Mitgliedern in einem Zimmer übernachtet hat, allerdings ohne die Erfüllung der oben genannten Bedingung, dass jede Kombination nur einmal ausgegeben wird.
Das ist mein derzeitiger SQL-Query:
Mein zweiter Ansatz bestand darin, dass ich die SQL-Abfrage so übernehme und in einer Stored Procedure nach der fett gedruckten Bedingung filter. Das Resultat ist, dass ich keinen Ansatz hätte, wie ich das in PLPGSQL formulieren könnte. Arrays scheinen auch nicht wirklich sinnvoll unterstützt zu sein.
Daher meine Frage: Ist es überhaupt möglich, die SQL-Abfrage zu modifizieren, sodass die fett gedruckte Bedingung erfüllt wird?
im Rahmen einer Hausaufgabe müssen wir mit PLPGSQL eine Funktion schreiben, die folgendes erledigen soll:
"Schreiben Sie eine Funktion occupancy die berechnet , wer mit wem wie viel Mal in einem Doppelzimmer übernachtet hat. Beachten Sie dabei, dass die Mitglieder in unterschiedlicher Reihenfolge genannt werden können, d.h. Müller als mitglied1 und Schulze als mitglied2 ist dasselbe wie Schulze als mitglied1 und Müller als mitglied2. Die Kombinationen können mit race notice auf dem Bildschirm ausgegeben werden. Beachten Sie dabei, dass jede Kombination nur 1 Mal ausgegeben wird."
Hier sind auch die folgenden Tabellenscripte (ohne Datensätze):
Code:
create table reisen ( rid int primary key, ziel varchar(20), hotel varchar(20), von date, bis date); create table mitglieder ( mID int, name VARCHAR (50), gebDatum date, primary key (mID)); create table istImDoppelzimmer ( mitglied1 int references Mitglieder, mitglied2 int references Mitglieder, reise int references Reisen, primary key (mitglied1,mitglied2,reise));
Das ist mein derzeitiger SQL-Query:
SELECT DISTINCT(COUNT(*)) AS Anzahl, m1.mid, m1.name, m2.mid, m2.name
FROM mitglieder m1, mitglieder m2, istImDoppelZimmer z
WHERE (z.mitglied1 = m1.mid AND z.mitglied2 = m2.mid) OR (z.mitglied1 = m2.mid AND z.mitglied2 = m1.mid)
GROUP BY m1.mid, m1.name, m2.mid, m2.name
FROM mitglieder m1, mitglieder m2, istImDoppelZimmer z
WHERE (z.mitglied1 = m1.mid AND z.mitglied2 = m2.mid) OR (z.mitglied1 = m2.mid AND z.mitglied2 = m1.mid)
GROUP BY m1.mid, m1.name, m2.mid, m2.name
Daher meine Frage: Ist es überhaupt möglich, die SQL-Abfrage zu modifizieren, sodass die fett gedruckte Bedingung erfüllt wird?

Kommentar