Frank (no reg): Knifflige SQL-Anfrage

Beitrag lesen

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