Knifflige SQL-Anfrage
Florian
- datenbank
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
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