我有两个方面得分(Zdobyte)和失球(Stracone)的总和(作为主持人(GoleGosp)和作为嘉宾(GoleGosc))的问题。我做错了什么?
为了获得HOST的目标,我使用
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);
对于作为GUEST的目标总和,我使用
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);
我不知道如何将这两个查询视为一个..
这个不行吗
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'
插入
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 :(得分:0)
我认为这就是你想要的:
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
我们使用您的查询来设置2个表,然后我们使用LEFT JOIN
将它们组合在一个表中并对您想要的值求和。
此查询提供了不同的结果,但我不确定哪些查询包含错误(由于我不完全理解数据,因此无法进行任何计数。
编辑:我现在很确定这最后一个查询是正确的,但请手动计算检查!您的原始查询没有显示一个俱乐部,因为它被加入声明遗漏了!
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)