【问题标题】:MYSQL: Average count from multiple tablesMYSQL:来自多个表的平均计数
【发布时间】:2014-07-31 03:47:34
【问题描述】:

我正在尝试平均每个收件人每次邮件的打开次数。

我希望返回这样的东西:

Mailing     Avg Open Per  
1           1.3  
2           3.4  
3           0.5  

我有三张桌子。以下是相关栏目

邮寄 M
三种邮寄方式。
m_id:每个邮件的 ID
m_name:三个邮件中每个邮件的名称

邮件收到 MR
u_id:接收邮件的人(多个用户可以接收多个邮件)
m_id: FK

邮寄开放式 MOT*
打开/单击操作
muo_id:用户打开/点击的标识符
muo_type_id: 1=点击 2=打开
u_id: FK

这是我尝试过的,除其他外:

SELECT m.m_id, AVG(CASE WHEN muo_type_id = 1 THEN 1 END) AS "Avg Open"
FROM mailing m
Left join
 mailing_received mr
on mr.m_id = m.m_id
Left join
mailing_open_type mot 
ON mr.u_id = mot.u_id
GROUP BY m.m_id;

编辑。也试过这个:

SELECT m.m_id, AVG(N) AS A,
(SELECT COUNT(CASE WHEN mot.muo_type_id = 1 THEN 1 END) AS N
FROM mailing m LEFT JOIN mailing_received mr ON m.m_id = mr.mailing_id
LEFT OUTER JOIN mailing_open_type mot
ON mr.u_id = mot.u_id
GROUP BY mr.u_id) as B;

仍然没有运气。

感谢您的帮助。

【问题讨论】:

  • 如何使用您尝试的第一个查询并稍作更改:... AVG(CASE WHEN muo_type_id = 1 THEN 1 ELSE 0 END) ...(注意ELSE 0 部分)
  • 好吧,那怎么样。有效。我很感激。

标签: mysql sql join count average


【解决方案1】:

您快到了,尝试简单地将.. ELSE 0 .. 添加到您尝试的第一个查询中:

SELECT m.m_id, AVG(CASE WHEN muo_type_id = 1 THEN 1 ELSE 0 END) AS "Avg Open"
FROM mailing m
Left join
 mailing_received mr
on mr.m_id = m.m_id
Left join
mailing_open_type mot 
ON mr.u_id = mot.u_id
GROUP BY m.m_id;

【讨论】:

  • 谢谢!我不知道我需要多长时间才能找到那个错误。
  • 不客气。很高兴看到这个简单的修复可以解决问题。
猜你喜欢
  • 2011-12-08
  • 2011-06-14
  • 2012-12-29
  • 1970-01-01
  • 2014-09-06
  • 2017-02-06
  • 2019-08-09
  • 1970-01-01
  • 2021-03-28
相关资源
最近更新 更多