[英]mysql query calculation with join different tables
我正在使用MySQL 4.2,並且有2個表:
tbl_User存儲USERID和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
您可以修改查詢以使用DISTINCT
。 usersWhoPosted
過usersWhoPosted
需要修改。 您的查詢正在統計已發布的郵件,而不是已發布的用戶:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.