1

我正在处理一个 mySQL 查询,希望能将每个表的小计加起来。

我为会员准备了一张桌子。这有他们的名字、唯一的 ID 和其他几个不相关的项目。另一个表旨在跟踪他们记录的社区服务。每个成员可以在其中多次。这些字段是 uniqueID(成员的外键)、auto_increment(因为它是主要的)、期限、小时数和位置。

我想要这个查询做的是添加给定术语的每个成员的小时数的总和。我所拥有的如下,但不幸的是,它只给了我第一个成员,每个成员的总数。有任何想法吗?

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

2 回答 2

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.

查看有关聚合函数和GROUP BY子句的文档。

建议使用显式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
于 2012-11-19T02:15:59.720 回答
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.

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

于 2012-11-19T02:16:06.740 回答