我正在开发一个mySQL查询,希望能够累加每个表的子总数。
我有一张桌子供会员使用。这有他们的名字,一个唯一的ID和其他几个不相关的项目。另一张表旨在跟踪他们记录的社区服务。每个成员可以多次进入。字段是uniqueID(成员的外键),auto_increment(对于它的主要),术语,小时数和位置。
我希望此查询执行的操作是为给定的术语添加每个成员的小时数。我的内容如下,但不幸的是,它只给了我第一个成员,每个成员的总数。有什么想法吗?
SELECT fName, lName, SUM(hours)
FROM members M, communityService S
WHERE S.term = 'f2012' && M.onid = S.member
答案 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.
请注意,我已使用现代连接语法重写了它。您的服务器没有“错误”,但最好将“懒惰”连接语法留在垃圾头中。