繁体   English   中英

MYSQL:来自多个表的平均计数

[英]MYSQL: Average count from multiple tables

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

我希望返回这样的内容:

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;

仍然没有运气。

谢谢您的帮助。

您快到了,尝试将.. 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;

暂无
暂无

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

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