繁体   English   中英

来自多个表的MYSQL左联接计数和求和

[英]MYSQL Left Join COUNTS AND SUMS from multiple tables

我曾尝试在SO中寻找类似的问题,但至今未找到任何问题。 如果您愿意,可以将重复或类似的问题标记在此问题上。

我想加入几列以显示报告。

我有3张桌子。

用户数

ID  Name
1   Chris
2   John
3   Rick

InMessages

ID  Content   
1   Hello1
2   Hello2
3   Response1
4   Response2
5   Hello3
6   Hello4

OutMessages

ID UserID InMessageID Content         CurrentRate
1  1      1           ReplyHello1     10
2  2      2           Reply1Hello2    10   
3  3      2           Reply2Hello2    10
4  3      2           Reply3Hello2    10
5  1      3           ReplyResponse1  10
6  2      4           ReplyResponse2  10
7  1      5           ReplyHello3     4
8  3      6           ReplyHello4     4

我希望看到的报告如下:

User   InMessagesCount OutMessagesCount Rate10 Rate4
Chris  3               3                2      1     
John   2               2                1      1
Rick   2               3                2      1

我已经尝试过现有的查询,例如:

  count(distinct InMessages.ID) as InMessagesCount,
  count(distinct OutMessages.ID) as OutMessagesCount

但是,我对如何才能做到这一点感到困惑。

提前致谢!

您的问题似乎是您的多个联接正在创建重复的记录,因此需要在当前计数中使用DISTINCT。 但是您不能用它来计算非唯一字段的出现次数

因此,我很想尝试这样的事情:

COUNT(DISTINCT IF(OutMessages.CurrentRate = 10, OutMessages.ID, NULL) ) AS Rate10,
COUNT(DISTINCT IF(OutMessages.CurrentRate = 4, OutMessages.ID, NULL) ) AS Rate4

即,如果id为10,则使用id,否则使用NULL。 这样的COUNT应该(我认为)仅计算非null值。

对于Mysql,您可以将sum()与表达式一起使用,以便将其评估为您需要的2个比率的计数

select 
u.Name,
count(distinct o.InMessageID) as InMessagesCount,
count(distinct o.ID) as OutMessagesCount,
sum(o.CurrentRate = 10) rate10,
sum(o.CurrentRate = 4) rate10
from OutMessages o
joins  users u on(u.id = o.user_id)
group by  u.id

您可以汇总与特定比率匹配的那些记录:

SUM(IF(OutMessages.CurrentRate = 10, 1,0)) AS Rate10,
SUM(IF(OutMessages.CurrentRate = 4, 1,0)) AS Rate4

您可以使用IFSUM ,如下所示:

SELECT UserID,
       COUNT(DISTINCT InMessages.ID) AS InMessagesCount,
       COUNT(DISTINCT OutMessages.ID) AS OutMessagesCount,
       SUM(IF(OutMessages.CurrentRate = 10, 1, 0)) AS Rate10,
       SUM(IF(OutMessages.CurrentRate = 4, 1, 0)) AS Rate4
FROM OutMessages
GROUP BY UserID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM