に参加し、このテーブル:複数のテーブル(1サブクエリである)私は(再び)は
User:
id | name
-------------
1 | 'John'
2 | 'Peter'
3 | 'Luke'
Accounts:
id | userid | amount | date
--------------------------
1 | 1 | 1000 | '2012-01-26'
2 | 1 | 2000 | '2011-12-25'
3 | 1 | 1000 | '2012-01-25'
4 | 2 | 1500 | '2012-01-15'
5 | 3 | 2500 | '2011-11-30'
私は、データを収集する必要があるので、私は、同時に、ユーザーとの結果セットを持って、数各ユーザーのアカウントの金額の合計、および各ユーザーのアカウントの合計ですが、現在の日付のみの日付です。
このようなもの:
Some-query:
UserName | CountAccts | SumAccts | CountAcctsThisYear
-----------------------------------------------------
'John' | 3 | 4000 | 2
'Peter' | 1 | 1500 | 1
'Luke' | 1 | 2500 | 0
I
SELECT u.name as Username,
COUNT(acctsthisyear.id) as CountAcctsThisYear
FROM User u
LEFT JOIN (SELECT a.id
FROM Accounts a
WHERE DATE_FORMAT(a.date,'%Y') = DATE_FORMAT(CURDATE(),'%Y')
) AS acctsthisyear ON u.id = acctsthisyear.userid
GROUP BY u.id;
しかし、ここでの問題はだ、私はできません:
SELECT u.name as Username,
COUNT(a.id) as CountAccts,
SUM(a.amount) as SumAccts
FROM User u
LEFT JOIN Accounts a ON u.id = a.userid
GROUP BY u.id;
また、私は、この他の1で最初と最後の列を取得することができます:このクエリで最初の3列を取得するために管理しますこのような方法でこの2つのクエリを使用して、私が期待している最終的な結果を得ることができます...
私は... - アカウントテーブルとacctsthisyearサブクエリをUserテーブル(グループ化us.idフィールドで)、私が得るのは次のようなものです:
UserName | CountAccts | SumAccts | CountAcctsThisYear
-----------------------------------------------------
'John' | 6 | 6000 | 6
'Peter' | 1 | 1500 | 1
'Luke' | 0 | 0 | 0
(すべての詳細を覚えていますが、事は、たとえば、CountAcctsThisyearの「ジョン」の2つの結果は、結果にあまりにも重複取得し、すべてを掛けます、ということであることはできません... )
- サブクエリとして各クエリを試みた:第 とも選択USIDとしてu.idと同様に第一、 (第2クエリ))UFIDも選択さu.idと (最初のクエリから SELECT * GROUP BY ufid、usid
と、このようなものだ:
UserName | CountAccts | SumAccts | CountAcctsThisYear
-----------------------------------------------------
'John' | 3 | 4000 | 2
'Peter' | 1 | 1500 | 2
'Luke' | 1 | 2500 | 2
'John' | 3 | 4000 | 1
'Peter' | 1 | 1500 | 1
'Luke' | 1 | 2500 | 1
'John' | 3 | 4000 | 0
'Peter' | 1 | 1500 | 0
'Luke' | 1 | 2500 | 0
(私は要素によってグループを反転させた場合と、私が得るすべては同じですが、異なる順序でグループ化された...)
任意の方法を...それは...私が探しているものを達成するための正しい方法は何か?私は本当にSQLの専門家ではないので、実際にはそれに苛立ちます。 -/
感謝を!私の実際のデータにはより多くの条件があるので、私はまだテストしていますが、不可欠な部分は私が投稿したものでした...今、正解と思われます。 –
だから、もう一度ありがとう! –