我正在尝试从多个表返回多个计数。下面是我必须从同一个表返回多个计数的内容(非常感谢这里的帮助):
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充当表之间的外键。
这是我能得到的最接近的。我非常喜欢上面的格式,因为它更干净,但是我不知道我是否能够像上面描述的那样加入。
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;我的输出看起来是这样的:
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这是不对的。
谢谢。
发布于 2014-07-29 22:26:31
我不太确定我是否理解您在第二个查询中试图计算的内容,但是您应该能够适应这一点。这样做的目的是创建几个表(子查询),这些表(子查询)以mailing_name作为键,无论您的计数/聚合值是什么,want...and都会将它们连接到该mailing_name键上。
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_nameYOu可以继续将它们链接在一起,以获得尽可能多的其他计数,只要它们按相同的mailing_name键分组即可。如果需要常规字段(如mailing_name_id或排序),请在邮件名称上加入到表中,然后获取所需的字段。
希望这是合理的,如果你需要的话,我可以澄清;)
添加:
这个查询的更一般的结构..。
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值?
https://stackoverflow.com/questions/25025835
复制相似问题