Problem mit JOIN bei einer Klausuraufgabe

0001001

Grünschnabel
Hallo,

wir haben letztes Semester SQL durchgenommen. In einer Klausur kommt folgende Aufgabe vor, ich weiss leider nicht ob meine Lösung richtig ist:

Gegeben folgendes Realtionenschema:
supplier(supp_id, supp_name, status, city)
part(part_id, part_name, color, weight)
project(proj_id, proj_name)
shipment(supp_id, part_id, proj_id)

a, Was ist der kleinste, durchschnitt. und größte Statuswert eines Lieferanten
b, Wie hoch ist das Teile-Gesamtgewicht der einzelnen Projekte für Teile von Lieferanten aus Berlin
c, Wie hoch ist das Teile-Gesamtgewicht der einezelnen Projekte, nur für Projekte deren Gesamtgewicht größer ist, als das doppelte des durchschnittlichen Gewichtes aller Teile?

Meine (Teil-Lösungen):
a,
SELECT MIN(status) AS kleinster_Wert, AVG(status) AS durchschnitts_Wert, MAX(status) AS groesster_Wert
FROM supplier

b, da haperts schon weil ich meine probleme mit joins hab, da ich denke dass man ja keine tabellen miteinander verknüpfen kann die keinen gemeinsamen schlüssel haben oder?
SELECT SUM(weight)
FROM
WHERE supllier.city='Berlin'

c,
SELECT SUM(weight)
FROM
WHERE

Wäre super wenn mir da jmd auf die Sprünge helfen könnte
 
Hi

ich kenne diese Aufgaben, hat immer sowas von Textaufgaben aus der Grundschule, entweder mal liebt sie oder man fuckelt sich so durch :-)

Meine Ansätze (allerdings unter Vorbehalt) sind nur Beispiele, erledigen solltest Du das ja selbst.

Frage 2:
Du musst alle Tabellen miteinanander in Verbindung bringen. Im nächsten Schritt kommt die Abfrage nach Stadt und dann das Group by auf die Lieferantennamen.

SELECT sum(p.weight), s.supp_name FROM ((
part as p INNER JOIN shipment as sh ON p.part_id = sh.part_id)
INNER JOIN supplier as s ON sh.supp_id = s.supp_id)
INNER JOIN project as pr ON pr.proj_id = sh.proj_id
where s.city = 'Berlin'
Group by s.supp_name

Frage 3:
Auch hier wirst Du 3 Tabellen in Verbindung bringen. Die shipment ist wohl immer die Brückentabelle zwischen den anderen. Jeder Part der Haupttabellen muss mit den IDs der Brückentabelle im join verbunden werden.

Dann wird hier wohl eine Aggregatfunktion in der Abfrage benötigt, aus dem Grunde dann die Having-Klausel. Das Ergebnis sollte dann mit dem Durchschnitt * 2 der part-Tabelle über einen Subselect vergleichen werden.

SELECT sum(p.weight), pr.proj_name FROM (
part as p INNER JOIN shipment as sh ON p.part_id = sh.part_id)
INNER JOIN project as pr ON pr.proj_id = sh.proj_id
Group by pr.proj_name
having sum(p.weight) > (SELECT avg(weight)*2 FROM part)
 
Zuletzt bearbeitet:
Zurück