2015-01-31 3 views
0

Я пытаюсь сделать запрос, чтобы получить сколько пользователей Users сколько Documents, результат я ожидаю это одинMySQL Count родитель и Чайлдс

Users  Documents 
297  0 
5   1 
10  3 
16  8 

Так что я могу видеть мой активности пользователей, и посмотреть, почему существует так много пользователей без документов, загруженных в другой процесс.

Я попробовал этот запрос

SELECT COUNT(u.id) AS Users, COUNT(d.id) AS Documents 
FROM user u 
INNER JOIN document d ON u.id = d.user_id 
GROUP BY u.id 

В результате я получаю что-то вроде этого

Users  Documents 
1   2 
1   1 
1   0 
1   1 
1   1 
... 

Вместо того, чтобы общее число пользователей и документов, это дает мне всего документы для каждого пользователя ...

Я уверен, что это можно сделать легко, это простой запрос, но сегодня я полностью заблокирован.

Таблицы структуры theese

USER id, username, password, email

ДОКУМЕНТ id, title, body, user_id, created_at, updated_at

отношения document.user_id к user.id, ничего сложного.

+0

Что является источником для ожидаемого результата. – Jens

+0

Вы имеете в виду структуру таблицы для пользователя и документа? –

+0

В результате вы получаете что-то вроде: 297 пользователей имеют 0 документов, 5 пользователей имеют 1 документ .... Правильно? –

ответ

2

sqlfiddle

select count(t.userId) Users, t.numberOfDocs Documents from (
    select u.id userId, count(d.id) numberOfDocs 
    from user u 
    left join document d on d.user_id = u.id 
    group by u.id) as t 
group by t.numberOfDocs 
-- order by users or number of documents (Depends on your requirements) 
; 

см демо здесь: sqlfiddle

+0

Это работает с некоторыми настройками, но я получаю что-то странное, я пробовал 3000 пользователей и 3000 документов, только один пользователь имеет 2 документа, остальные 1, поэтому результаты должны быть «2999 - 1» и «1 - 2 ", но он говорит« 2998 -1 »и« 1 - 2 », делая« SELECT COUNT (DISTINCT user_id) »в таблице« Документы », говорит 2999, поэтому ... Dunno –

+0

Я просто добавил полный запрос, см. sqlfiddle. – MrSimpleMind

+0

Хорошо, глупо мне, я делал INNER JOIN, поэтому я получил 2998 вместо 2999, потому что был 1 пользователь с 0 документами: P Спасибо! –

Смежные вопросы