내가 가지고있는 (다시)이 테이블에 가입 : 나는 데이터를 수집 할 필요가 그래서이여러 테이블 (하나는 하위 쿼리입니다)
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
나는이 다른 하나를 사용하여 첫 번째와 마지막 열을 얻을 수 있습니다, 또한
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;
:이 쿼리로 처음 3 열을 얻기 위해 관리 문제는 여기있어,
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
는 (모든 세부 사항을 기억하지 수 있지만 것은 예를 들어, CountAcctsThisyear에서 '존'에 대한 2 개 결과가 결과에 너무 중복 얻고, 모두 곱한 도착한다는 것입니다 ... USID 또한 선택된으로 초로) AS 제) u.id와 (제 쿼리 FROM SELECT * (ufid 또한 선택된으로 u.id와 제 쿼리)
- 가 부질 각 쿼리를 시도 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에 대한 전문가는 아니지만 이후 특별히에 합류, 그것은 정말 실망이야 : -/
감사합니다! 나는 진짜 데이터가 더 많은 조건을 가지고 있기 때문에 나는 여전히 테스트하고있다. 그러나 필수적인 부분은 내가 게시 한 것 ... 바로 지금, 그것은 정답으로 보인다, 나는 시험을 마치 자마자 너에게 말할 것이다! –
그래서 그게 다야, 또 고마워! –