У меня есть (снова) эти таблицы:
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
Мне удалось получить первые 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;
Но вот в чем проблема, я не могу использовать эти два запроса таким образом, чтобы получить ожидаемый конечный результат ...
У меня есть ...
- попытался покинуть таблицу Accounts и подзапрос acctsthisyear с таблицей User (группировка по полю us.id), но все, что я получил, было примерно так:
UserName | CountAccts | SumAccts | CountAcctsThisYear
-----------------------------------------------------
'John' | 6 | 6000 | 6
'Peter' | 1 | 1500 | 1
'Luke' | 0 | 0 | 0
(не могу вспомнить все детали, но дело в том, что, например, 2 результата для 'John' в CountAcctsThisyear тоже дублируются в результате, и все умножается ...)
- пробовал каждый запрос как подзапрос:
ВЫБРАТЬ ИЗ
(первый запрос с u.id в качестве ufid также выбран) как первый,
(второй запрос с u.id в качестве usid также выбран) Как второй
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, особенно по Joins: - /