在MYSQL中添加子总和

时间:2012-11-19 02:12:54

标签: mysql

我正在开发一个mySQL查询,希望能够累加每个表的子总数。

我有一张桌子供会员使用。这有他们的名字,一个唯一的ID和其他几个不相关的项目。另一张表旨在跟踪他们记录的社区服务。每个成员可以多次进入。字段是uniqueID(成员的外键),auto_increment(对于它的主要),术语,小时数和位置。

我希望此查询执行的操作是为给定的术语添加每个成员的小时数。我的内容如下,但不幸的是,它只给了我第一个成员,每个成员的总数。有什么想法吗?

SELECT fName, lName, SUM(hours)
FROM members M, communityService S
WHERE S.term = 'f2012' && M.onid = S.member

2 个答案:

答案 0 :(得分:1)

您只是缺少一个GROUP BY子句来汇总每fName,lName的总和:

SELECT fName, lName, SUM(hours)
FROM members M, communityService S
WHERE S.term = 'f2012' && M.onid = S.member
GROUP BY lName, fName

除MySQL以外的大多数RDBMS都会报告您的查询语法错误,但MySQL有一个独特的默认行为,即选择非确定性的匹配行来填充聚合中不包含的其他列出现在GROUP BY子句中。这就是你得到第一行lName, fName

的原因

审核the documentation on aggregate functions and the GROUP BY clause

建议使用显式INNER JOIN而不是隐式(逗号分隔FROM)。

SELECT
  fName,
  lName,
  SUM(hours) AS total_hours
FROM 
  members M, 
  INNER JOIN communityService S M.onid = S.member
WHERE 
  S.term = 'f2012' 
GROUP BY lName, fName

答案 1 :(得分:1)

您需要group by条款,例如

SELECT fName, lName, SUM(hours)
FROM members
INNER JOIN communityService ON communityService.member = members.onid
WHERE communityService.term = 'f2012'
GROUP BY fName, lName   <--- modify as desired for your requirements.

请注意,我已使用现代连接语法重写了它。您的服务器没有“错误”,但最好将“懒惰”连接语法留在垃圾头中。