我正在使用MySQL 4.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
答案 0 :(得分:2)
你可以这样做:
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
写一个庞大的笨拙查询。
如果你真的必须转换表(即交换行/列),请以编程方式(例如在PHP中,如果你正在使用MySQL)。