2012-01-27 71 views
1

我在MySQL上有两个表,结构如下:一对多关系中有多少行?

用户: ID |名称

帐户: ID |用户ID |金额

我需要一个查询来获取每个用户的总帐户,并在结果中包含用户名。有没有办法做到这一点?我已经在from子句中尝试了子查询,并且我不知道如何使用连接来实现此目的,但是我怀疑这是否可能是解决方案...任何想法?

这里的样本数据和示例输出我假装获得:

Users 
1 | 'John' 
2 | 'Peter' 

Accounts 
1 | 1 | 1000 
2 | 1 | 2000 
3 | 2 | 1500 

query: 
'John' | 2 <- there are 2 accounts for user 'John' 
'Peter' | 1 <- there is only 1 account for user 'Peter' 

而且,如果我想在我的结果更多的汇总数据?说...总金额。例如:

another query: 
'John' | 2 | 3000 <- 2 accounts for John, which sums 3000 
'Peter' | 1 | 1500 <- 1 account for Peter, which sums 1500 
+0

看一看在INNER JOIN,GROUP BY和SUM() – 2012-01-27 02:13:21

回答

2

这里有一个查询来获取用户的名字和他们的帐户数:

SELECT u.name, COUNT(a.id) AS numAccounts 
FROM Users u 
LEFT JOIN Accounts a ON u.id=a.userid 
GROUP BY u.id; 

要得到量列的总和,你可以这样做:

SELECT u.name, COUNT(a.id) AS numAccounts, SUM(u.amount) AS totalAmount 
FROM Users u 
LEFT JOIN Accounts a ON u.id=a.userid 
GROUP BY u.id; 
2
select u.name, count(a.id) as numAccounts 
from 
users as u, accounts as a 
where u.id = a.userid 
group by u.id 


select u.name, count(a.id) as numAccounts, sum(a.amount) as totalAmount 
from 
users as u, accounts as a 
where u.id = a.userid 
group by u.id 

编辑:请注意,如果用户没有帐户,他们将不会出现在这里,您将需要一个左连接像约拿的查询。

+0

谢谢!似乎左边加入的解决方案是唯一的;) – 2012-01-27 02:33:25