2013-03-31 31 views
0

我想让我的MySQL表返回给定年份中每个成员的总额。下面是SQL查询我写使用MySQL subQuery获取个人总计

SELECT First_name, last_name, (SELECT SUM(amount) 
FROM contributions 
WHERE contributions.memberid = members.memberid AND year = '2013') AS amount FROM members 

,我得到这个错误

MySQL错误#:1064

您的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法在线路附近使用'2

我使用MySQL 5.5.24手动

请我究竟做错了什么?

+0

你有一个名为列'一年'或者你在存储日期? – Taryn

+0

我有一列名为 – user2209076

+0

的列是您正在使用的完整查询吗?我在演示中没有收到错误 - http://www.sqlfiddle.com/#!2/4d346/2 – Taryn

回答

0

我唯一能看到的是你有单引号的年份,但是我没有再现this demo中的错误。

您还可以使用子查询编写查询和JOIN:

select m.first_name, 
    m.last_name, 
    c.amount 
from members m 
inner join 
(
    select sum(amount) Amount, memberid 
    from contributions 
    where year = 2013 
    group by memberid 
) c 
    on m.memberid = c.memberid 

Demo

如果您不是在一个单独的列存储year和你有一个datetime列,那么你会需要使用year()功能:

select m.first_name, 
    m.last_name, 
    c.amount 
from members m 
inner join 
(
    select sum(amount) Amount, memberid 
    from contributions 
    where year(yourDate) = 2013 
    group by memberid 
) c 
    on m.memberid = c.memberid 
0

或者,也许改变了你这样的代码:

SELECT First_name, 
last_name, 
(SELECT SUM(amount) 
FROM contributions 
WHERE contributions.memberid = members.memberid 
AND contributions.year = '2013') AS amount 
FROM members 

我只是改变这一行,

AND contributions.year = '2013' 

因为也许在您的查询ambigued(两表中存在)

Saludos)

+0

谢谢你们,结果我的查询是好的。也许我的Dreamweaver中存在一个错误,所以我必须对它进行硬编码。我的问题解决了。 – user2209076