2016-04-13 11 views
0

Ich habe ein Problem mit Get SUM der Gesamtzahl der Tore (Zdobyte) und Gegentakelt (Stracone) von jeder Mannschaft auf beiden Seiten, als Host (GoleGosp) und als Gast (GoleGosc). Was mache ich falsch?MySQL SUM aus mehreren Spalten mit verschiedenen GROUP BY

Für get SUM von Zielen als Host verwenden i

SELECT CONCAT(Nazwa,' ',Miasto) AS Klub, SUM(GoleGosp) AS Zdobyte,SUM(GoleGosc) AS Stracone FROM mecze JOIN kluby ON mecze.IdGosp=kluby.IdKlub WHERE (IdGosp BETWEEN 1 AND 16) AND IdGosp<>IdGosc GROUP BY CONCAT(Nazwa,' ',Miasto); 

Und für SUM von Zielen als die Gäste i

SELECT CONCAT(Nazwa,' ',Miasto) AS Klub, SUM(GoleGosc) AS Zdobyte,SUM(GoleGosp) AS Stracone FROM mecze JOIN kluby ON mecze.IdGosc=kluby.IdKlub WHERE (IdGosc BETWEEN 1 AND 16) AND IdGosc<>IdGosp GROUP BY CONCAT(Nazwa,' ',Miasto); 

Ich weiß nicht, wie man als diese beiden Abfragen SUM ..

Dieses funktioniert nicht

SELECT DISTINCT ZdobyteGOSP,StraconeGOSP,ZdobyteGOSC,StraconeGOSC FROM 

(SELECT CONCAT(Nazwa,' ',Miasto) AS Klub, SUM(GoleGosp) AS ZdobyteGOSP,SUM(GoleGosc) AS StraconeGOSP FROM mecze JOIN kluby ON mecze.IdGosp=kluby.IdKlub WHERE (IdGosp BETWEEN 1 AND 16) AND IdGosp<>IdGosc GROUP BY CONCAT(Nazwa,' ',Miasto)) as p1, 
(SELECT CONCAT(Nazwa,' ',Miasto) AS Klub, SUM(GoleGosc) AS ZdobyteGOSC,SUM(GoleGosp) AS StraconeGOSC FROM mecze JOIN kluby ON mecze.IdGosc=kluby.IdKlub WHERE (IdGosc BETWEEN 1 AND 16) AND IdGosc<>IdGosp GROUP BY CONCAT(Nazwa,' ',Miasto)) as p2; 

.

'CREATE TABLE `mecze` (
    `IdGosp` int(11) DEFAULT NULL, 
    `IdGosc` int(11) DEFAULT NULL, 
    `Datameczu` date DEFAULT NULL, 
    `GoleGosp` int(11) DEFAULT NULL, 
    `GoleGosc` int(11) DEFAULT NULL, 
    `IleWidzow` int(11) DEFAULT NULL, 
    KEY `IdGosp` (`IdGosp`), 
    KEY `IdGosc` (`IdGosc`), 
    CONSTRAINT `mecze_ibfk_2` FOREIGN KEY (`IdGosc`) REFERENCES `kluby` (`IdKlub`), 
    CONSTRAINT `mecze_ibfk_1` FOREIGN KEY (`IdGosp`) REFERENCES `kluby` (`IdKlub`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8' 
'CREATE TABLE `kluby` (
    `IdKlub` int(11) NOT NULL DEFAULT ''0'', 
    `Nazwa` varchar(40) DEFAULT NULL, 
    `Miasto` varchar(30) DEFAULT NULL, 
    `RokZal` varchar(4) DEFAULT NULL, 
    PRIMARY KEY (`IdKlub`) 


) ENGINE=InnoDB DEFAULT CHARSET=utf8' 

EINSÄTZE

INSERT INTO kluby (IdKlub,Nazwa,Miasto,RokZal) VALUES 
(1,'Wisla','Krakow',1933), 
(2,'Slask','Wroclaw',1947), 
(3,'Legia','Warszawa',1945), 
(4,'Lech','Poznan',1950), 
(5,'Stomil','Olsztyn',1962), 
(6,'Lechia','Gdansk',1949), 
(7,'Rokita','Brzeg Dolny',1951), 
(8,'Izolator','Boguchwala',1955), 
(9,'LKS','Lodz',1946), 
(10,'Gornik','Zabrze',1948), 
(11,'Groclin','Grodzisk',1977), 
(12,'Wisla','Plock',1932), 
(13,'Cracovia','Krakow', 1925), 
(14,'Korona','Kielce',1933), 
(15,'Jagiellonia','Bialystok',1954), 
(16,'Unia','Raciborz',1950); 

INSERT INTO mecze (IdGosp,IdGosc,Datameczu,GoleGosp,GoleGosc,IleWidzow) values 
(10,14,'2009-01-25',2,2,9830), 
(11,14,'2009-02-01',2,2,1876), 
(12,14,'2009-02-08',5,1,8670), 
(13,14,'2009-02-15',5,3,16969), 
(14,14,'2009-02-22',2,5,7688), 
(15,1,'2008-10-05',1,2,1222), 
(16,2,'2008-10-05',3,0,1899), 
(15,3,'2008-10-15',2,1,1333), 
(16,4,'2008-10-15',0,5,722), 
(5,15,'2008-10-22',1,1,2113), 
(6,16,'2008-10-22',1,1,522), 
(4,10,'2008-12-28',3,5,6521), 
(5,10,'2009-01-04',4,5,6077), 
(6,10,'2009-01-11',3,3,10385), 
(7,10,'2009-01-18',2,5,8254), 
(8,10,'2009-01-25',5,4,9821), 
(9,10,'2009-02-01',5,2,3256), 
(1,1,'2008-10-04',3,3,5559), 
(2,1,'2008-10-05',4,5,7565), 
(3,1,'2008-10-12',1,4,8910), 
(4,1,'2008-10-19',3,5,1208), 
(5,1,'2008-10-26',2,1,6577); 
+0

könnten Sie Einbuchtung auf Ihre Fragen auch anwenden so sind sie besser lesbar und fügen vielleicht auch ein paar insert-aussagen für testdaten und das erwartete ergebnis mit diesen testdaten hinzu – Jester

+0

Beitrag editiert, ug ot einige Einsätze für beide Tabellen – Kend3r

+0

Schön, nur meine eigene Datenbank einrichten, um damit zu testen. Könnten Sie also besser zeigen oder erklären, was Ihr erwartetes Ergebnis mit diesem Datensatz wäre? – Jester

Antwort

0

ich nachgedacht habe, ist, was Sie wollen:

SELECT T1.Klub, T1.Zdobyte+IFNULL(T2.Zdobyte,0) AS Zdobyte, T1.Stracone+IFNULL(T2.Stracone,0) AS Stracone 
FROM (SELECT idKlub, 
     CONCAT(Nazwa,' ',Miasto) AS Klub, 
     SUM(GoleGosp) AS Zdobyte, 
     SUM(GoleGosc) AS Stracone 
     FROM mecze 
     JOIN kluby ON mecze.IdGosp=kluby.IdKlub 
     WHERE (IdGosp BETWEEN 1 AND 16) 
     AND IdGosp<>IdGosc GROUP BY CONCAT(Nazwa,' ',Miasto)) AS T1 
LEFT JOIN (SELECT idKlub, 
       CONCAT(Nazwa,' ',Miasto) AS Klub, 
       SUM(GoleGosc) AS Zdobyte, 
       SUM(GoleGosp) AS Stracone 
       FROM mecze 
       JOIN kluby ON mecze.IdGosc=kluby.IdKlub 
       WHERE (IdGosc BETWEEN 1 AND 16) 
       AND IdGosc<>IdGosp GROUP BY CONCAT(Nazwa,' ',Miasto)) AS T2 ON T2.idKlub = T1.idKlub 

Wir sind Ihre beiden Abfragen aufbrauchen 2 Tische setzen und dann verwenden wir eine LEFT JOIN zu bekommen sie zusammen in einer Tabelle und Sum die Werte, die Sie wollten.

Diese Abfrage gibt ein anderes Ergebnis, aber ich bin nicht sicher, welche der Abfrage enthält einen Fehler (jede Zählung nicht getan hat, wie ich die Daten nicht vollständig verstehen

Edit:. Ich bin ziemlich sicher, dass diese letzte Frage ist jetzt richtig, aber überprüfen Sie bitte durch manuelles Zählen! Ihre ursprüngliche Abfrage nicht einen Verein zeigte, weil es durch eine Join-Anweisung weggelassen wurde!

SELECT CONCAT(Nazwa,' ',Miasto) AS Klub, 
     SUM(GoleGosp) AS Zdobyte, 
     SUM(GoleGosc) AS Stracone 
FROM (SELECT Nazwa, Miasto, SUM(GoleGosp) AS GoleGosp, SUM(GoleGosc) AS GoleGosc 
     FROM kluby 
     JOIN mecze ON mecze.IdGosp=kluby.IdKlub AND mecze.IdGosp BETWEEN 1 AND 16 AND mecze.IdGosp != mecze.IdGosc 
     GROUP BY CONCAT(Nazwa,' ',Miasto) 
     UNION 
     SELECT Nazwa, Miasto, SUM(GoleGosc) AS GoleGosp, SUM(GoleGosp) AS GoleGosc 
     FROM kluby 
     JOIN mecze ON mecze.IdGosc=kluby.IdKlub AND mecze.IdGosc BETWEEN 1 AND 16 AND mecze.IdGosp != mecze.IdGosc 
     GROUP BY CONCAT(Nazwa,' ',Miasto)) AS T1 
GROUP BY CONCAT(Nazwa,' ',Miasto) 
+0

Ich brauche Zdobyte und Zdobyte2 als eine Spalte, dasselbe für Stracone und Stracone2 – Kend3r

+0

Also was erwartest du mit den Werten in ihnen passieren? Müssen sie summiert werden? – Jester

+0

Ja. Ich brauche SUM aus diesen beiden als eine Spalte. Also Ergebnis sollte wie sein Klub Zdobyte (als SUM von Zdobyte und Zdobyte2) Stracone (als SUM von Stracone und Stracone2) – Kend3r