Hallo zusammen,
ich lerne gerade für eine SQL-Klausur und beiße mir an einer Aufgabe die Zähne aus. Ich habe eine Lösung, die mir logisch erscheint, aber eine andere, kompliziertere Lösung wurde mir als korrekt genannt. Ich würde gerne verstehen, wo der Denkfehler liegt.
Das Datenbankschema:
Person (person_id, name, alter)
Gegenstand (gegenstand_id, name)
Ausleihe (person_id, gegenstand_id, datum)
Die Aufgabenstellung:
"Finde die ID jedes Gegenstands (gegenstand_id
) und das Durchschnittsalter der Personen, die älter als 40 sind und diesen Gegenstand mindestens 3 Mal ausgeliehen haben
Meine Lösung, die mir logisch erscheint:
SQL
SELECT
A.gegenstand_id,
AVG(P.alter) AS Durchschnittsalter
FROM
Ausleihe A
JOIN
Person P ON A.person_id = P.person_id
WHERE
P.alter > 40
GROUP BY
A.gegenstand_id
HAVING
COUNT(*) >= 3;
Eine andere, vorgeschlagene Lösung:
SQL
SELECT
A.gegenstand_id,
AVG(P.alter) AS Durchschnittsalter
FROM
Ausleihe A
JOIN
Person P ON A.person_id = P.person_id
WHERE
P.alter > 40
AND A.gegenstand_id IN (
SELECT gegenstand_id
FROM Ausleihe
GROUP BY gegenstand_id
HAVING COUNT(*) >= 3
)
GROUP BY
A.gegenstand_id;
Meine Frage an euch: Welche der beiden Lösungen ist korrekt und warum genau ist die andere falsch? Ich habe das Gefühl, es hat mit der Reihenfolge von
WHERE
und
HAVING
zu tun, aber ich kann den Fehler in meiner Logik nicht genau finden.
Vielen Dank für eure Hilfe!
Gemini 2.5 pro sagt letzteres , GPT ,QWEN sagen meine lösung geht auch