Florian: Knifflige SQL-Anfrage

Hallo!

Ich bräuchte eine etwas knifflige SQLAnfrage und komm einfach nicht drauf :-) (Ich verwende MySQL 5.0.18.)

Ich habe 2 Tabellen (siehe http://fotos.seasonic.net/tables.gif). Tabelle1 hat ein Attribut, nach welchem ich in Tabelle2 suchen und es aufsummieren will. Soweit noch relativ einfach, wenn man nur in einer Spalte sucht:

_______________________________________________________

SELECT Attrib1A, COUNT (Attrib2C) AS Summe_Attrib1A
 FROM Tabelle1, Tabelle2
      WHERE Attrib1A = Attrib2C

GROUP BY Attrib1A
   ORDER BY Summe_Attrib1A DESC
_______________________________________________________

Jedoch kommt das gesuchte Attribut in mehreren Spalten von Tabelle 2 vor. Wie kann ich das lösen?

Danke für Eure Hilfe,
Frohe Ostern,
Flo

  1. Hallo,

    mit COUNT() Summiert man nicht, man zählt. Du
    möchtest wahrscheinlich eher SUM() verwenden,
    wenn du "summieren" willst?

    Was genau soll denn die Summe denn umfassen? Alle Vorkommen von
    Tabelle1.Attrib1A in Tabelle2.Attrib2C _und_ Tabelle2.Attrib2E
    _und_ Tabelle2.Attrib2G?

    Ganz banal kannst du ja einfach 3 Abfragen schreiben und dann die
    jeweiligen Ergebnisse von Hand zusammenzählen. Du kannst aber auch
    unter Verwendung von Subselects und dem UNION
    Operator Zwischenaggregationen vornehmen. Also z.b. so:

      
    SELECT Attrib1A, SUM(Attrib2Wert)  
    FROM  
         (SELECT Tabelle1.Attrib1A, Count(Tabelle2.Attrib2C) AS Attrib2Wert  
          FROM Tabelle1  
          INNER JOIN Tabelle 2 ON Tabelle1.Attrib1A = Tabelle2.Attrib2C  
          GROUP BY Tabelle1.Attrib1A  
          UNION  
          SELECT Tabelle1.Attrib1A, Count(Tabelle2.Attrib2E) AS Attrib2Wert  
          FROM Tabelle1  
          INNER JOIN Tabelle 2 ON Tabelle1.Attrib1A = Tabelle2.Attrib2E  
          GROUP BY Tabelle1.Attrib1A  
          UNION  
          SELECT Tabelle1.Attrib1A, Count(Tabelle2.Attrib2G) AS Attrib2Wert  
          FROM Tabelle1  
          INNER JOIN Tabelle 2 ON Tabelle1.Attrib1A = Tabelle2.Attrib2G  
          GROUP BY Tabelle1.Attrib1A)  
    GROUP BY Attrib1A  
    
    

    oder

      
    SELECT Tabelle1.Attrib1A, SUM(Attrib2Wert)  
    FROM Tabelle1  
    INNER JOIN  
         (SELECT Attrib2C AS Attrib, Count(Attrib2C) AS Attrib2Wert  
          FROM Tabelle2  
          GROUP BY Tabelle2.Attrib2C  
          UNION  
          SELECT Attrib2E AS Attrib, Count(Attrib2E) AS Attrib2Wert  
          FROM Tabelle2  
          GROUP BY Attrib2E  
          UNION  
          SELECT Attrib2G AS Attrib, Count(Attrib2G) AS Attrib2Wert  
          FROM Tabelle2  
          GROUP BY Attrib2G) AS countErgebnisse  
    ON Tabelle1.Attrib1A = countErgebnisse.Attrib  
    GROUP BY Tabelle1.Attrib1A  
    
    

    Das Code-Schnipsel ist ungetestet und ich garantiere nicht, dass MySQL so etwas kann ;)

    HTH,
    Frank