Zum Inhalt springen
Melde dich an, um diesem Inhalt zu folgen  

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

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

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von saibotma
Ergänzung

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Deine Meinung

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich an , um mit Deinem Konto zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  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.

Melde dich an, um diesem Inhalt zu folgen  

Fachinformatiker.de, 2020 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

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

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung