2010-09-25 83 views
0

我有一个叫这种结构导致表:MySQL的加入与总

resultid,冠军,类型

而与此结构的表称为门票:

resultid,ticketid,赌,sum_won ,状态

而且我想告诉从表中结果每行和每一个结果,我想totalBet和Sum_won使用从表票值来计算

我试图做一些连接,一些总和,但我不能得到我想要的。

SELECT *,COALESCE(SUM(tickets.bet),0) AS totalbets, 
     COALESCE(SUM(tickets.sum_won),0) AS totalwins 
FROM `results` NATURAL JOIN `tickets` 
WHERE tickets.status<>0 
GROUP BY resultid 

请给我一些建议。

我想这样

RESULT WINNER TOTALBETS TOTALWINS 
1  2  431  222 
2  3   0   0 
3  1   23  0 
4  1   324  111 
+0

您能举出一些示例数据和该数据的预期结果吗?我认为这会让你的问题更清楚。 – 2010-09-25 19:04:45

+0

它也可能有助于发布'show create table results \ G'和'show create table tickets \ G'。什么是'raceid'? – unutbu 2010-09-25 19:08:36

+0

我的意思是resultid ... – NVG 2010-09-25 19:12:07

回答

1

使用显示的东西:

SELECT r.*, 
      COALESCE(x.totalbet, 0) AS totalbet, 
      COALESCE(x.totalwins, 0) AS totalwins 
    FROM RESULTS r 
LEFT JOIN (SELECT t.resultid, 
        SUM(t.bet) AS totalbet, 
        SUM(t.sum_won) AS totalwins 
      FROM TICKETS t 
      WHERE t.status != 0 
     GROUP BY t.resultid) x ON x.resultid = r.resultid 

我不关心自然连接语法,宁愿要明确了解如何加入/链接表一起。

+0

非常感谢!像魅力一样工作! – NVG 2010-09-25 19:28:43

0
SELECT *, COALESCE(SUM(tickets.bet),0) AS totalbets, 
     COALESCE(SUM(tickets.sum_won),0) AS totalwins 
FROM `results` NATURAL JOIN `tickets` 
WHERE tickets.status<>0 
GROUP BY resultid 

尝试与resultid替换第一个*。如果这有帮助,则将更多列添加到SELECT,并将它们同时添加到GROUP BY

+0

does not work ...如果我没有任何门票播放的那个resultid,那么它不会返回0 – NVG 2010-09-25 19:23:40