у меня есть (опять же) это таблицы:несколько таблиц (один подзапрос) присоединиться к
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'
мне нужно собрать данные, поэтому у меня есть, в то же время, Resultset с пользователями, счетчик счетов для каждого пользователя, суммы сумм для счетов для каждого пользователя, а также подсчета счетов для каждого пользователя, но только они имеют дату только на текущий год ...
Что-то вроде этого :
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 также выбран) в качестве второго ГРУППА ПО 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, особенно на Присоединяется: -/
Спасибо! Я все еще тестирую, так как мои реальные данные имеют намного больше условий, но существенная часть была тем, что я опубликовал ... Сейчас, кажется, правильный ответ, я скажу вам, как только закончу тестирование! –
так, чтобы это было, еще раз спасибо! –