2012-01-27 16 views
1

私はこの構造でMySQLの2つのテーブルを持っています:1対多リレーションにはいくつの行がありますか?

ユーザー: 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

:量の列の合計を取得するには

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

を、あなたのような何かを行うことができますINNER JOIN、GROUP BY、SUM() –

答えて

2

は、ユーザーの名前と自分のアカウントの数を取得するクエリです:見てください

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

ありがとう!それは左の結合された解決策が1つだったようだ;) –

関連する問題