首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL:从多个表返回多个计数

MYSQL:从多个表返回多个计数
EN

Stack Overflow用户
提问于 2014-07-29 22:11:17
回答 1查看 113关注 0票数 0

我正在尝试从多个表返回多个计数。下面是我必须从同一个表返回多个计数的内容(非常感谢这里的帮助):

代码语言:javascript
复制
SELECT
     m.mailing_name AS Mailing_Name,
    COUNT(mr.mailing_recipient_id) AS Total_Recipients
FROM mailing_recipient mr 
INNER JOIN mailing m
ON mr.mailing_id = m.mailing_id
GROUP BY m.mailing_name
ORDER BY m.mailing_name;

这将返回每个电子邮件类型的收件人数。我期待创建一个脚本,而返回上述除了电子邮件打开的总数和每个收件人的电子邮件打开的每个类型的数目。

附加表是mailing_recipient_open,mailing_recipient_open_id充当打开/单击的标识符,mailing_recipient_open_type_id指示每个记录是打开的还是单击的(1=click和2=open)。mailing_recipient_id充当表之间的外键。

这是我能得到的最接近的。我非常喜欢上面的格式,因为它更干净,但是我不知道我是否能够像上面描述的那样加入。

代码语言:javascript
复制
SELECT
mailing_name,
mr.mailing_recipient_id,
mailing_recipient_open_id,
COUNT( mr.mailing_recipient_id ) AS Total_recipient,
mailing_recipient_open_id AS open_click

FROM mailing m

LEFT OUTER JOIN mailing_recipient mr ON m.mailing_id = mr.mailing_id
LEFT OUTER JOIN mailing_recipient_open mc ON mr.mailing_recipient_id = mc.mailing_recipient_id

GROUP BY mailing_name;

我的输出看起来是这样的:

代码语言:javascript
复制
mailing_name    mailing_recipient_id    mailing_recipient_open_id    Total_recipient    Open_click
Mailing A       1                       NULL                         203234             NULL
Mailing B       22342                   12342                        123948             8738
Mailing C       12322                   NULL                         145203             NULL

这是不对的。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-29 22:26:31

我不太确定我是否理解您在第二个查询中试图计算的内容,但是您应该能够适应这一点。这样做的目的是创建几个表(子查询),这些表(子查询)以mailing_name作为键,无论您的计数/聚合值是什么,want...and都会将它们连接到该mailing_name键上。

代码语言:javascript
复制
select a.mailing_name, a.totalrecipients, b.counter
from
(SELECT
 m.mailing_name AS Mailing_Name,
COUNT(mr.mailing_recipient_id) AS Total_Recipients
FROM mailing_recipient mr 
INNER JOIN mailing m
ON mr.mailing_id = m.mailing_id
GROUP BY m.mailing_name
)a
left join
(select mailing_name, count(*) as counter
 from tableforcounting 
group by mailing_name)b
on a.mailing_name = b.mailing_name
    ORDER BY m.mailing_name

YOu可以继续将它们链接在一起,以获得尽可能多的其他计数,只要它们按相同的mailing_name键分组即可。如果需要常规字段(如mailing_name_id或排序),请在邮件名称上加入到表中,然后获取所需的字段。

希望这是合理的,如果你需要的话,我可以澄清;)

添加:

这个查询的更一般的结构..。

代码语言:javascript
复制
select a.groupingname, a.count, b.count, c.count, etc...
from
(select  groupingname, count(1) as count from table t group by  groupingname) a
left join
(select  groupingname, count(1) as count from differnt_table t where open = 1 group by  groupingname) b    
on a.groupingname = b.groupingname
left join
(select  grouping name, count(1) as count from 3rdtable t) c
on a.groupingname = c.groupingname

看看这是一系列子查询,每个查询返回一个要连接的键,加上一个value...then,select语句只从一个表中获取键,然后从子查询中获取其余的count值?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25025835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档