Veröffentlicht 20. November 20177 j 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 20177 j von maper
20. November 20177 j 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 20177 j von arlegermi
23. November 20177 j 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 20177 j von saibotma Ergänzung
23. November 20177 j 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 20177 j von PVoss
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.