InnoDB SUM zwei Tabellen

michael97

Benutzer
Beiträge
11
Hallo,
ich habe ein Problem und leider keine Lösung.
Ich habe zwei Tabellen. In einer stehen Personen drin. Jede Person ist hier einmalig. Entscheidend ist die ID. In der anderen Tabelle stehen Getränke drin.
Die vereinfachte Struktur sieht wie folgt aus:

Code:
menschen                                                      
m_id | getraenke_id

getraenke
g_id | name

Nun gibt es in der Tabelle 'getraenke' eine bestimmte (evtl. unbekannte) Anzahl Getränke. Ich möchte nun wissen, wie viele Getraenke von welcher Sorte die Menschen insgesamt getrunken haben (es ist auch wichtig, welches Getränk überhaupt nicht konsumiert wurde).

Das Ergebnis soll wie folgt aussehen:
Code:
getraenke_id           anzahl
1                         15
2                         0
3                         6
4                         2
5                         5
6                         9
.....                   .......

Mein Ansatz ist von der Form
Code:
SELECT SUM(CASE WHEN getraenke_id =1 THEN 1 ELSE 0 END) AS anzahl FROM menschen
Hier habe ich jetzt keien Idee, wie ich die tabelle 'getraenke' bzw. sämtliche g_id aus ihr in die Abfrage einbeziehe.

Vielleicht hat jemand einen Ansatz.

Viele Grüße
Michael
 
Werbung:
Code:
test=*# select * from menschen ;
 m_id | g_id
------+------
  1 |  1
  1 |  2
  2 |  2
  3 |  1
  3 |  3
  3 |  2
(6 rows)

test=*# select * from getraenke ;
 g_id |  name
------+--------
  1 | kaffee
  2 | bier
  3 | wein
(3 rows)

test=*# select g.g_id, g.name, count(1) from menschen m left join getraenke g on m.g_id=g.g_id group by g.g_id, g.name order by 3 desc;
 g_id |  name  | count
------+--------+-------
  2 | bier  |  3
  1 | kaffee |  2
  3 | wein  |  1
(3 rows)

Einen Kaffee bitte.
 
Hallo akretschmer,
vielen Dank für deine Antwort. Ich konnte sie leider noch nicht ausprobieren. Liefert mir die Abfrage auch die Getränke, die niemand bestellt hat? So in der Art hatte ich die Abfrage auch schon, allerdings fehlten die Getränke, die niemand bestellte. Oder es ist noch früh am Morgen und ich stehe gerade aufm Schlauch.

Michael
 
Werbung:
ja, geht auch.

Code:
test=*# select * from menschen ;
 m_id | g_id
------+------
  1 |  1
  1 |  2
  2 |  2
  3 |  1
  3 |  3
  3 |  2
(6 rows)

test=*# select * from getraenke ;
 g_id |  name  
------+--------
  1 | kaffee
  2 | bier
  3 | wein
  4 | sekt
(4 rows)

test=*# select g.name, count(m) from getraenke g left join menschen m on m.g_id=g.g_id group by g.name order by g.name desc;;
  name  | count
--------+-------
 wein  |  1
 sekt  |  0
 kaffee |  2
 bier  |  3
(4 rows)
 
Zurück
Oben