我正在尝试从多个表返回多个计数。这是我必须从同一个表返回多个计数的内容(非常感谢这里的帮助):
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=点击,2=打开)。 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
这根本不对。
谢谢。
最佳答案
我不太确定我是否理解您在第二个查询中尝试计算的内容,但您应该能够适应这一点。这个想法是创建几个以 mailing_name 作为键以及您想要的任何计数/聚合值的表(子查询)...并将它们全部连接到该 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_name
只要它们按相同的 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
看看它是如何构成一系列子查询的,每个子查询返回一个要连接的键以及一个计数值...然后 select 语句仅从一个表中获取键,然后从子查询中获取其余的计数值?
关于MYSQL:从多个表返回多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025835/