[英]MySQL query with calculation from two 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
這是我正在使用的查詢:
Select 'Percentage',
Sum(Case
When tbl_User.REGCODE = 9001 And
tbl_User.USERID = tbl_Message.AUTHORID Then 1 Else 0
End) / Sum(Case When tbl_User.REGCODE = 9001 Then 1 Else 0 End) * 100.0,
Sum(Case
When tbl_User.REGCODE = 9002 And
tbl_User.USERID = tbl_Message.AUTHORID Then 1 Else 0
End) / Sum(Case When tbl_User.REGCODE = 9002 Then 1 Else 0 End) * 100.0,
Sum(Case
When tbl_User.REGCODE = 9003 And
tbl_User.USERID = tbl_Message.AUTHORID Then 1 Else 0
End) / Sum(Case When tbl_User.REGCODE = 9003 Then 1 Else 0 End) * 100.0,
Sum(Case
When tbl_User.REGCODE = 9004 And
tbl_User.USERID = tbl_Message.AUTHORID Then 1 Else 0
End) / Sum(Case When tbl_User.REGCODE = 9004 Then 1 Else 0 End) * 100.0,
Sum(Case
When tbl_User.REGCODE = 9005 And
tbl_User.USERID = tbl_Message.AUTHORID Then 1 Else 0
End) / Sum(Case When tbl_User.REGCODE = 9005 Then 1 Else 0 End) * 100.0,
Sum(Case
When tbl_User.REGCODE = 9006 And
tbl_User.USERID = tbl_Message.AUTHORID Then 1 Else 0
End) / Sum(Case When tbl_User.REGCODE = 9006 Then 1 Else 0 End) * 100.0,
Sum(Case
When tbl_User.REGCODE = 9007 And
tbl_User.USERID = tbl_Message.AUTHORID Then 1 Else 0
End) / Sum(Case When tbl_User.REGCODE = 9007 Then 1 Else 0 End) * 100.0,
Sum(Case
When tbl_User.REGCODE = 9008 And
tbl_User.USERID = tbl_Message.AUTHORID Then 1 Else 0
End) / Sum(Case When tbl_User.REGCODE = 9008 Then 1 Else 0 End) * 100.0
From tbl_User
left Join tbl_Message
tbl_Message ON tbl_User.USERID = tbl_Message.AUTHORID
Where tbl_Message.AUTHORID IS NOT NULL
你可以這樣做:
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
REGCODE
中使用REGCODE
要比在列中容易得多。 否則你就會為你正在使用的每個你感興趣的REGCODE
編寫一個龐大的笨拙查詢。
如果你真的必須轉換表(即交換行/列),那么以編程方式(例如在PHP中,如果你正在使用MySQL)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.