maper Geschrieben 20. November 2017 Geschrieben 20. November 2017 (bearbeitet) Hallo, Ist meine Lösung so okay? (Datenbankmodelldiagramm im Anhang) a) Erstellen Sie eine SQL-Abfrage, die alle in der DB gespeicherten Parteien mit Anzahl ihrer Wähler auflistet, alphabetisch aufsteigend, sortiert nach Parteienbezeichnung Meine Lösung: SELECT p.P_Bezeichnung, Count(w.W_ID) FROM Partei p INNER JOIN Waehler w ON p.P_ID=w.P_ID GROUP BY p.P_Bezeichnung ORDER BY p.P_Bezeichnung ASC IHK: SELECT Partei.P_Bezeichnung AS Partei, (SELECT COUNT(W_ID) FROM Waehler WHERE Waehler.W_P_ID = Partei_P_ID) AS AnzahlWahler FROM Partei ORDER BY Partei.P_Bezeichnung Ich habe generell das Gefühl, dass man die Aufgaben die mit Subquerys gelöst werden, auch immer mit GROUP BY lösen kann. Lieg ich da richtig? Edit: Eine kleine Zusatzfrage noch - Ist es wichtig die Spalten dementsprechend zu benennen ? - also wenn ein Ausschnitt aus dem Lösungs-ResultSet vorgegeben ist, muss ich da die Benamung der Spalten beachten? (z.B. AS Anzahlwaehler) MfG Bearbeitet 20. November 2017 von maper Zitieren
arlegermi Geschrieben 20. November 2017 Geschrieben 20. November 2017 (bearbeitet) In deiner Lösung würde eine Partei mit 0 Stimmen nicht auftauchen, insofern unterscheiden die sich schon. Wenn du deinen JOIN korrigierst, sollte das an sich das gleiche Ergebnis geben. Benennung der Spalten würde ich auf jeden Fall übernehmen - woher soll der Prüfer sonst wissen, dass du weißt, wie das geht? Bearbeitet 20. November 2017 von arlegermi maper reagierte darauf 1 Zitieren
saibotma Geschrieben 23. November 2017 Geschrieben 23. November 2017 (bearbeitet) Wenn du das INNER JOIN durch ein LEFT JOIN ersetzt, dann sollte es funktionieren. Wenn du bei den IHK Aufgaben joinst, dann nimm einfach immer LEFT JOIN her, denn das funktioniert eigentlich immer. Bearbeitet 23. November 2017 von saibotma Ergänzung Zitieren
JimTheLion Geschrieben 23. November 2017 Geschrieben 23. November 2017 (bearbeitet) Man kann die Subquery-Lösung auch noch anders gestalten. Je nach Datenbanksystem und Daten können sonst ungünstige Ausführungspläne verwendet werden. https://en.wikipedia.org/wiki/Correlated_subquery In folgender Variante ist die Subquery unabhängig von der äußeren Abfrage, müsste also nicht für jede Ergebniszeile der äußeren Abfrage ausgeführt werden: SELECT Partei.P_Bezeichnung, IFNULL(Stimmen.anzahl, 0) AS anzahl FROM Partei LEFT JOIN ( SELECT Waehler.P_ID, count(*) AS anzahl FROM Waehler GROUP BY Waehler.P_ID ) AS Stimmen ON Stimmen.P_ID = Partei.P_ID ORDER BY Partei.P_Bezeichnung ASC OB das in der Praxis dann tatsächlich einen Vorteil bringt muss man in den einzelnen Fällen ausprobieren und vergleichen. Mit CTEs sieht das auch nochmal hübscher aus, besonders sobald man mehrere dieser Joins verwendet http://modern-sql.com/de/anwendung/literarisches-sql, http://modern-sql.com/de/feature/with Bearbeitet 23. November 2017 von PVoss Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.