来自多个表的MySQL SUM

时间:2012-07-13 20:11:12

标签: php mysql sql

我有2个表:'sending_fresh'和'agents'

我想从'sending_fresh'获得'cc'等于特定日期的总数和来自'agent'的特定团队。

我目前有:

SELECT SUM(sending_fresh.cc), agents.team  
FROM sending_fresh, agents 
WHERE agents.team = 'team1' 
AND sending_fresh.date = '2012-05-12'

当从“sending_fresh”表中进行选择时,总和工作正常,但在从第二个表中添加WHERE语句时会出现更高和更错的答案。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

主要答案

  

sending_fresh中的外键是agent_id,对应id表中的agents

您错过了JOIN条件并且缺少GROUP BY子句:

SELECT SUM(s.cc), a.team  
  FROM sending_fresh AS s
  JOIN agents        AS a ON a.id = s.agent_id
 WHERE a.team = 'team1' 
   AND s.date = '2012-05-12'
 GROUP BY a.team;

在我们获得有关加入的信息之前,我写道:

SELECT SUM(s.cc), a.team  
  FROM sending_fresh AS s
  JOIN agents        AS a ON a.team = s.team    -- Guess at join columns!
 WHERE a.team = 'team1' 
   AND s.date = '2012-05-12'
 GROUP BY a.team;

由于你错过了加入条件,我不得不猜测它是什么。它可能改为a.team_id = s.team_id或类似的东西。

如果联接在sending_fresh.team,如果您愿意,可以完全避免加入。

SELECT SUM(cc), team  
  FROM sending_fresh
 WHERE team = 'team1' 
   AND date = '2012-05-12'
 GROUP BY team;

此简化无效,现在更详细地了解模式。


一般性评论

请注意,使用显式JOIN意味着您不应忘记连接条件。您不应在FROM子句中使用表符号的逗号列表。您需要了解它以识别古老的SQL。您永远不应该在新SQL中使用它,而应该升级旧SQL以使用显式连接。

请注意,如果查询中有N个表,则应该具有N-1个连接条件。