2015-01-31 93 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