【问题标题】:MySql Join with SumMySql 加入 Sum
【发布时间】:2010-09-25 19:02:30
【问题描述】:

我有一个名为 RESULTS 的表,结构如下:

结果,获胜者,类型

还有一个具有这种结构的名为 TICKETS 的表:

resultid,ticketid,bet,sum_won,状态

我想显示表 RESULTS 中的每一行,对于每个结果,我想使用表 TICKETS 中的值计算 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

【问题讨论】:

  • 您能否给出一些示例数据以及该数据的预期结果?我认为这会让你的问题更清楚。
  • 发帖show create table results \Gshow create table tickets \G 也可能会有所帮助。 raceid 是什么?

标签: sql mysql join outer-join


【解决方案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

我不关心 NATURAL JOIN 语法,我更愿意明确说明如何将表连接/链接在一起。

【讨论】:

    【解决方案2】:
    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

    【讨论】:

    • 不起作用...如果我没有为该 resultid 播放任何门票,那么它不会返回 0
    猜你喜欢
    • 2015-04-26
    • 2015-02-08
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    相关资源
    最近更新 更多