SQL "Problemstellung" für mich nicht lösbar...

Hektik

Erfahrenes Mitglied
Hallo!

Wenn ich folgende Datenbank habe:

IMG_0696.png


Wie lautet der SQL-Befehl für folgende Aufgabenstellung:

Erstelle den SQL-Befehl, um die durchschnittliche Leistung aller betreuten Generatoren zu ermitteln.

Mein erster Ansatz war
Code:
SELECT
avg(Leistung) AS [Durchschnittliche Leistung]
FROM
t_typ
;

Das Ergebnis wäre aber nur der Leistungsdurchschnitt der einzelnen Typen.

Angenommen, ich habe jetzt dutzende Generatoren in meiner Anlage und viele davon verschiedenen Typs. Dann müsste ich doch erstmal die Anzahl aller Generatoren und deren Gesamtleistung ermitteln um diese dann durch die Anzahl zu teilen. Aber wie bringe ich das in einem SQL-Befehl unter?

Mein Problem ist, dass die Leistung der Generatoren in einer anderen Tabelle steht, als die Auflistung der Generatoren selbst :-|

Also:
- Es gibt eine unbekannte Anzahl von Anlagen (t_anlagen)
- Jede Anlage hat einen ganz speziellen Typ von Generator (t_generator)
- Die Leistung eines jeden Generators steht in der Tabelle t_typ

Wie lautet die durchschnittliche Leistung (aus t_typ) aller Generatoren (t_generator), die in den in den verschiedenen Anlagen (t_anlagen) eingebaut sind?

edit:
Wäre das vllt richtig? Hab ich jetzt mal mit Hilfe des Internets gebastelt?!

Code:
SELECT
t_anlage.AnlagenNr, t_anlage.Anlage, avg(t_typ.Leistung) AS [Durchschnittliche Leistung]
FROM
t_anlage
JOIN t_generator.typNr ON t_anlage.AnlageNr = t_generator.AnlageNR
JOIN t_typ.Leistung ON t_generator.TypNr = t_typ.TypNr
GROUP BY
t_Anlage.Anlage
 
Hi

dass Generatoren in Anlagen verbaut sind ist hier zu vernachlässigen.
Nur Generatorenexemplare und Typen werden gebraucht.

Also, als Basis mal die zwei Tabellen zusammen bringen.
Geht ziemlich einfach:
SQL:
SELECT
*
FROM
T_Generator, T_Typ
Das zeigt vorerst mal jeden Generator mit jedem Typ (auch nichtpassenden) kombiniert.
Angezeigt werden alle Spalten beider Tabellen, aber das ist zurzeit egal.

Als Nächstes wird gefiltert, dass nur Zeilen übrig bleiben, bei denen
der Generator mit dem Typ zusammenpasst.
Die Typnummer des Generators steht ja pro Zeile schon da, und auch der vollständige Typ mit ID:
SQL:
SELECT
*
FROM
T_Generator, T_Typ
WHERE
T_Generator.TypNr = T_Typ.TypNr

Und schon hat man jeden Generator nur noch einmal, mit "seinem" Typ in der gleichen Zeile.
Der Rest ist dann trivial: Gewünschte Ausgabespalten angeben (statt dem *)
Sicherheitshalber mit dem Tabellennamen, falls es in T_Generator auch mal ein Leistung gibt.
SQL:
SELECT
avg(T_Typ.Leistung) AS 'Durchschnittliche Leistung'
FROM
T_Generator, T_Typ
WHERE
T_Generator.TypNr = T_Typ.TypNr
;

Gruß

edit: Zwei Joins und Group?
Öhm...etwas umständlich :D
 

Neue Beiträge

Zurück