Eine scheinbar grundlegende Abfrage, die mir viele Probleme gibt. Ich hatte eine ähnliche abgeschlossen, aber scheint nicht richtig zu sein. Ich habe drei Tabellen Ich bin auf der Suche nach oben aus:SQL - Erhalten Durchschnittsgehalt für jede Abteilung und Anzahl der Kurse in dieser Abteilung gelehrt
CM - Beschreibt Abteilungen im Unternehmen mit Feldern DEPT, BUDGET
EM - beschreibt Mitarbeiter mit Feldern ID, NAME, DEPT, GEHALT
CR - beschreibt Lehrveranstaltungen mit Feldern cnum, Department, ID
Fett gedruckte Felder sind Primärschlüssel.
Ich dachte, dies sofort funktionieren würde, aber es kehrte nur eine Abteilung mit einem Durchschnitt für die enitre Gehaltsspalte:
select CM.Dept, CM.Budget, avg(EM.Salary), count(distinct(CR.Cnum))
from CM join EM join CR
where CM.DEPT = EM.DEPT and CM.DEPT = CR.DEPT
group by CM.DEPT;
Hint, 'Gruppe by' ... Verwenden Sie auch' join' über Kommas in der 'from' Klausel ... – sgeddes
Ok, super! Es zeigt mehr Abteilungen und alles andere passend, aber jetzt gibt es nur 3 der 4 Abteilungen zurück. Mir ist aufgefallen, dass in der CR-Tabelle mit den Kursen die 4. Abteilung fehlt. Ich vermute, ich würde eine Unterabfrage für dieses tun müssen, anstatt das CM.Dept = CR.Dept einzuschließen? – TacoB0t
Sie können nicht 'Join EM Join CR' verwenden, ohne die Spalten anzugeben, denen sie beitreten sollten. Es ist überraschend, dass Sie mit dem, was Sie gepostet haben, keinen Syntaxfehler bekommen haben. Entweder hast du es nicht benutzt oder MySQL ist ernsthaft kaputt. Die richtige Syntax lautet 'Join EM on EM.column = CM.column', wobei * column' durch die entsprechenden Spaltennamen ersetzt werden sollte. –