簡體   English   中英

MySQL查詢從兩個表計算

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM