Zum Inhalt springen

SQL - Statt Subquery Lösung mit GROUP BY möglich?


maper

Empfohlene Beiträge

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

123.PNG

Bearbeitet von maper
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von arlegermi
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von PVoss
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...