2015-01-31 91 views
0

我试图进行查询,以获得多少用户Users有多少Documents,我期待的结果是这样的一个MySQL的计数家长和孩子的

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

用户 id, username, password, email

DOCUMENT id, title, body, user_id, created_at, updated_at

的关系是document.user_iduser.id,没有什么复杂的。

+0

什么是您预期的结果源。 – Jens 2015-01-31 22:01:47

+0

你是指用户和文档的表格结构? – 2015-01-31 22:02:41

+0

结果你会得到如下结果:297个用户有0个文档,5个用户有1个文档....对不对? – 2015-01-31 22:03:17

回答

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文档,只有1用户有2个文件,其余有1,所以结果应该是“2999 - 1”和“1 - 2“,但它说”2998 -1“和”1 - 2“,执行'SELECT COUNT(DISTINCT user_id)'到'Documents'表,说2999所以... Dunno – 2015-01-31 22:22:37

+0

我刚刚添加完整查询,请参阅sqlfiddle。 – MrSimpleMind 2015-01-31 22:23:13

+0

好的,我愚蠢的是,我在做一个INNER JOIN,这就是为什么我得到2998而不是2999,因为有1个用户有0个文档:P谢谢!ç – 2015-01-31 22:37:58