Hallo,
ich bin gerade dabei SQL zu lernen und möchte nun eine Abfrage erstellen, bei der mir die Mannschaft (und zwar soll nur die Mannschaft ohne die Anzahl der Spieler) ausgegeben wird mit den meisten ausländischen Spielern.
Hier mein Datenbankschema:
CREATE TABLE team(
team id INTEGER PRIMARY KEY,
name TEXT,
sponsor TEXT
) ;
CREATE TABLE s p i e l e r (
s p i e l e r i d INTEGER PRIMARY KEY,
vorname TEXT,
nachname TEXT,
g eha l t INTEGER,
n a t i o n a l i t a e t TEXT,
geburtsdatum DATE,
team id INTEGER,
FOREIGN KEY ( team id ) REFERENCES team( team id )
) ;
Mit den folgenden Datensätzen:
INSERT INTO "team" VALUES (NULL, "Werder Bremen", "Wiesenhof");
INSERT INTO "team" VALUES (NULL, "Borussia Dortmund", "Evonik");
INSERT INTO "team" VALUES (NULL, "Bayern Muenchen", "T-Mobile");
INSERT INTO "team" VALUES (NULL, "Bayer Leverkusen", "SunPower");
INSERT INTO "team" VALUES (NULL, "Hamburger SV", "Fly Emirates");
INSERT INTO "spieler" VALUES(NULL, "Robert", "Lewandowski", 125000, "polnisch", "1988-08-21", 2);
INSERT INTO "spieler" VALUES(NULL, "Marco", "Reus", 333000, "deutsch", "1989-05-31", 2);
INSERT INTO "spieler" VALUES(NULL, "Aaron", "Hunt", 368000, "deutsch", "1986-09-04", 1);
INSERT INTO "spieler" VALUES(NULL, "Rene", "Adler", 223000, "deutsch", "1985-01-15", 5);
INSERT INTO "spieler" VALUES(NULL, "Dennis", "Aogo", 210000, "deutsch", "1987-01-14", 5);
INSERT INTO "spieler" VALUES(NULL, "Franck", "Ribery", 1080123, "franzoesisch", "1983-04-07", 3);
INSERT INTO "spieler" VALUES(NULL, "Javi", "Martinez", 500000, "spanisch", "1988-09-02", 3);
INSERT INTO "spieler" VALUES(NULL, "Son", "Heung-min", 500000, "suedkoreanisch", "1992-07-08", 5);
Mein erster Vorschlag wäre:
select name1 from(
select name1, max(anzahl) from (
select name as name1, count(spieler_id) as anzahl from team t1
join spieler s1 on t1.team_id = s1.team_id
where nationalitaet !='deutsch'
group by t1.name));
Allerdings wird mir hier komischerweise, was ich überhaupt nicht verstehe, Hamburger SV ausgegeben obwohl der Subselect, den ich fett markiert habe, Bayern München und 2 für die Count-Fkt. ausgibt.
Wäre super, wenn mir jemand eine funktionierende Anweisung sagen könnte und mir verraten könnte warum meine Abfrage so arbeitet, wie sie arbeitet.
Vielen Dank
ich bin gerade dabei SQL zu lernen und möchte nun eine Abfrage erstellen, bei der mir die Mannschaft (und zwar soll nur die Mannschaft ohne die Anzahl der Spieler) ausgegeben wird mit den meisten ausländischen Spielern.
Hier mein Datenbankschema:
CREATE TABLE team(
team id INTEGER PRIMARY KEY,
name TEXT,
sponsor TEXT
) ;
CREATE TABLE s p i e l e r (
s p i e l e r i d INTEGER PRIMARY KEY,
vorname TEXT,
nachname TEXT,
g eha l t INTEGER,
n a t i o n a l i t a e t TEXT,
geburtsdatum DATE,
team id INTEGER,
FOREIGN KEY ( team id ) REFERENCES team( team id )
) ;
Mit den folgenden Datensätzen:
INSERT INTO "team" VALUES (NULL, "Werder Bremen", "Wiesenhof");
INSERT INTO "team" VALUES (NULL, "Borussia Dortmund", "Evonik");
INSERT INTO "team" VALUES (NULL, "Bayern Muenchen", "T-Mobile");
INSERT INTO "team" VALUES (NULL, "Bayer Leverkusen", "SunPower");
INSERT INTO "team" VALUES (NULL, "Hamburger SV", "Fly Emirates");
INSERT INTO "spieler" VALUES(NULL, "Robert", "Lewandowski", 125000, "polnisch", "1988-08-21", 2);
INSERT INTO "spieler" VALUES(NULL, "Marco", "Reus", 333000, "deutsch", "1989-05-31", 2);
INSERT INTO "spieler" VALUES(NULL, "Aaron", "Hunt", 368000, "deutsch", "1986-09-04", 1);
INSERT INTO "spieler" VALUES(NULL, "Rene", "Adler", 223000, "deutsch", "1985-01-15", 5);
INSERT INTO "spieler" VALUES(NULL, "Dennis", "Aogo", 210000, "deutsch", "1987-01-14", 5);
INSERT INTO "spieler" VALUES(NULL, "Franck", "Ribery", 1080123, "franzoesisch", "1983-04-07", 3);
INSERT INTO "spieler" VALUES(NULL, "Javi", "Martinez", 500000, "spanisch", "1988-09-02", 3);
INSERT INTO "spieler" VALUES(NULL, "Son", "Heung-min", 500000, "suedkoreanisch", "1992-07-08", 5);
Mein erster Vorschlag wäre:
select name1 from(
select name1, max(anzahl) from (
select name as name1, count(spieler_id) as anzahl from team t1
join spieler s1 on t1.team_id = s1.team_id
where nationalitaet !='deutsch'
group by t1.name));
Allerdings wird mir hier komischerweise, was ich überhaupt nicht verstehe, Hamburger SV ausgegeben obwohl der Subselect, den ich fett markiert habe, Bayern München und 2 für die Count-Fkt. ausgibt.
Wäre super, wenn mir jemand eine funktionierende Anweisung sagen könnte und mir verraten könnte warum meine Abfrage so arbeitet, wie sie arbeitet.
Vielen Dank