我有(再次)此表:多個表(一個是子查詢)加入
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管理與此查詢,以獲得前3列:
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;
另外,我可以拿到第一和最後一列與此另一個:
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;
但是,這裏的問題,我不能設法使用這兩個查詢以這種方式得到我期待的最終結果...
我有... - 試圖左用用戶表加入帳戶表和acctsthisyear子查詢(分組由us.id字段),但我得到的是這樣的:
UserName | CountAccts | SumAccts | CountAcctsThisYear
-----------------------------------------------------
'John' | 6 | 6000 | 6
'Peter' | 1 | 1500 | 1
'Luke' | 0 | 0 | 0
(不記得所有的細節,但問題是,例如,2個結果「約翰」在CountAcctsThisyear,得到的結果過分重複,所有乘上... )
- 試圖每個查詢作爲子查詢: SELECT * FROM (與u.id第一查詢作爲UFID還選擇)AS第一, (與u.id第二查詢作爲USID還選擇)AS第二 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方面的專家,特別是在連接: -/
謝謝!我仍然在測試,因爲我的真實數據有更多的條件,但最基本的部分是我發佈的東西......現在,這似乎是正確的答案,我會盡快告訴你,一旦我完成測試! – 2012-01-27 05:44:10
就這樣了,再次感謝! – 2012-01-27 06:19:15