Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

InnoDB SUM zwei Tabellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von michael97, 3 Mai 2016.

  1. michael97

    michael97 Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. michael97

    michael97 Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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)
    
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden