Braumeister mit Anzahl der Biere ausgeben

erodad

Neuer Benutzer
Beiträge
1
Hi Leute, ich lerne zur Zeit SQL und hänge grade an einer Aufgabe:

beers(name, date_of_creation, alcohol_by_volume, brewmaster[brewmasters], brewery[breweries])

breweries(name, year_of_foundation, current_brewmaster[brewmasters])

brewmasters(brewer_id, name, date_of_birth)


So sehen die drei Tabellen aus und die Aufgabenstellung lautet so:
Erstellen Sie eine SQL-Anfrage, die alle Braumeister mit Namen und der Anzahl der von ihnen jeweils gebrauten Biere ausgibt. Die Ausgabe soll absteigend nach Anzahl der Biere sortiert sein.

Mein Versuch:
SELECT brewmasters.name, COUNT(beers.name) AS Anzahl
FROM brewmasters INNER JOIN beers
ON brewmasters.brewer_id = beers.brewmaster
GROUP BY brewmasters.brewer_id
ORDER BY Anzahl DESC


Rein theorethisch ist es doch auch möglich, dass ich Braumeister in der "brewmasters" Tabelle habe, die keinem Bier aus "beers" zugeordnet sind. Diese müssten mit meiner Lösung allerdings nicht angezeigt werden, da ich diese mit "ON brewmasters.brewer_id = beers.brewmaster" quasi rausfiltere. Wie müsste ich es machen, dass mir die Brausmeister ohne Bier auch noch angezeigt werden. Und was haltet ihr von meiner Lösung?

Mit freundlichen grüßen,
erodad
 
Werbung:
Werbung:
Code:
test=# create table brauereien(id int primary key, name text);
CREATE TABLE
test=# create table braumeister(id int primary key, name text);
CREATE TABLE
test=# create table biere (id int primary key, braumeister int references braumeister, brauerei int references brauereien, datum date);
CREATE TABLE
test=#
test=#
test=# insert into brauereien values (1, 'Brauerei 1');
INSERT 0 1
test=# insert into brauereien values (2, 'Brauerei 2');
INSERT 0 1
test=# insert into brauereien values (3, 'Brauerei 3');
INSERT 0 1
test=# insert into braumeister values (1, 'Hans');
INSERT 0 1
test=# insert into braumeister values (2, 'Max');
INSERT 0 1
test=# insert into braumeister values (3, 'Gustav');
INSERT 0 1
test=# insert into biere values (1, 1,1, '2017-01-01');
INSERT 0 1
test=# insert into biere values (2, 2,2, '2017-02-01');
INSERT 0 1
test=# insert into biere values (3, 2,3, '2017-03-01');
INSERT 0 1
test=# insert into biere values (4, 1,3, '2017-04-01');
INSERT 0 1

test=# select bm.name, count(b) from biere b right join braumeister bm on b.braumeister=bm.id group by bm.name;
  name  | count
--------+-------
 Gustav |  0
 Max  |  2
 Hans  |  2
(3 rows)

Sollte sogar mit MySQL gehen...
 
Zurück
Oben