2012-01-31 48 views
1

我使用MySQL 4.2,我有2個表:MySQL查詢計算與加入不同的表

tbl_User商店的用戶ID和REGCODE。 REGCODE是用於註冊服務的代碼用戶。 tbl_Message存儲由每個用戶發佈的消息。

我需要查詢tbl_User中的所有用戶的相應REGCODE才能獲得總數。然後,我想知道這些用戶中有多少人在tbl_Message中至少有一個其USERID與AUTHORID相匹配的條目。最後一行是用戶擁有帖子的百分比。

我的目標是計算從最後一排兩個表中的比例,但我不知道如何加入表中查詢得到正確的答案。

表圖表:http://img526.imageshack.us/img526/6105/tablep.png

我昨天問到這個問題,並@ mathematical.coffee告訴我一個簡單的查詢得到我想要的結果。它起初工作,但我發現查詢與COUNT(tbl_User.USERID)的一些問題,並在我接受答案後離開加入。

你可以從這個查詢看到,「COUNT(tbl_User.USERID)爲totalUsers」由左側影響連接條件,因而總的用戶數是錯誤的。 有人可以幫助我,非常感謝!

SELECT REGCODE, 
     COUNT(tbl_User.USERID) as totalUsers, 
     COUNT(tbl_Message.MESSAGEID) as usersWhoPosted 
     COUNT(tbl_Message.MESSAGEID)/COUNT(tbl_User.USERID)*100 As Percent 
FROM tbl_User 
LEFT JOIN tbl_Message ON tbl_User.USERID=tbl_Message.AUTHORID 
WHERE REGCODE BETWEEN 9001 AND 9008 
GROUP BY REGCODE 

結果:

REGCODE totalUsers usersWhoPosted Percent 
9001  763   233    30.5374 
... 
9008  345   235    68.1159 
+0

'COUNT(DISTINCT tbl_User.USERID)作爲totalUsers' – 2012-01-31 00:24:40

回答

1

您可以修改您的查詢使用DISTINCTusersWhoPosted計數也需要修改。您的查詢計數發佈的消息,誰沒有發佈用戶:

SELECT 
    REGCODE, 
    COUNT(DISTINCT tbl_User.USERID) AS totalUsers, 
    COUNT(DISTINCT tbl_Message.AUTHORID) AS usersWhoPosted 
    COUNT(DISTINCT tbl_Message.AUTHORID)/COUNT(DISTINCT tbl_User.USERID) * 100 
     AS Percent 
FROM tbl_User 
    LEFT JOIN tbl_Message 
    ON tbl_User.USERID = tbl_Message.AUTHORID 
WHERE REGCODE BETWEEN 9001 AND 9008 
GROUP BY REGCODE 

你也可以把它改寫這樣的:

SELECT 
    REGCODE, 
    COUNT(*) AS totalUsers, 
    COUNT(HasPosted) AS usersWhoPosted 
    COUNT(HasPosted)/COUNT(*) * 100 
     AS Percent 
FROM tbl_User 
    LEFT JOIN (SELECT 1 AS HasPosted) AS dummy 
    ON EXISTS 
     (SELECT * 
      FROM tbl_Message 
      WHERE tbl_User.USERID = tbl_Message.AUTHORID 
     ) 
WHERE REGCODE BETWEEN 9001 AND 9008 
GROUP BY REGCODE 
+0

感謝@ypercube。現在用戶總數是正確的。但是,COUNT(tbl_Message.MESSAGEID)不會輸出正確的數字,這些用戶中有多少用戶在tbl_Message中至少有一個其USERID與AUTHORID相匹配的條目。它似乎計算了用戶的消息總數。 – user1177437 2012-01-31 00:34:23

+0

是的,看我的編輯。 – 2012-01-31 00:37:58

+0

你是男人!謝謝! – user1177437 2012-01-31 00:56:22