我有 15 多个包含电子邮件的表格。我需要计算每个互联网服务提供商(如 GMAIL、VMG、MSFT 或其他)有多少个电子邮件。
使用以下查询,我可以得到一个表的 ISP 数量:
SELECT COUNT(`my_isp`) AS 'COUNT', `my_isp` FROM `table1` GROUP BY `my_isp`
这将输出如下内容:
COUNT | my_isp
---------------
4000 | Gmail
---------------
2000 | MSFT
---------------
10000 | other
---------------
15000 | VMG
---------------
我需要做的是获取每个表的上述内容的总数,我有超过 15 个表。
说实话我不太清楚该如何开始。
** 编辑 **
所有表格都具有相同的格式和相同的列。它们都看起来像这样:
EMAIL | PROPERTY | STATUS | MY_ISP | CREATED_DATE | OTHER_DATES
有些电子邮件会存在于多个表中。每个表的 PROPERTY 会有所不同,STATUS 和 Date 列也会有所不同(我没有列出所有日期列)。
** 编辑 2 **
因此我尝试使用如下 UNION ALL:
select COUNT(`my_isp`) AS 'COUNT'
from (select count(t1.`my_isp`) from `table1` t1
UNION ALL
select count(t2.`my_isp`) from `table2` t2
)
但我收到以下错误:
#1248 - Every derived table must have its own alias
无需触及表格(或一个表格)的正确组织问题,您可以指定错误
是由于缺少子查询名称而导致的。
这个错误太简单了,不值得讨论)
其实请求可以是这样的。
小提琴
您的 union all 尝试已接近尾声。您希望从每个表中返回 my_isp。
“每个派生表都必须有自己的别名”错误告诉您,当您从子查询中选择或加入子查询时,您需要为其赋予别名(
as somealias
或somealias
在闭括号之后)。此外,您误解了 COUNT;您提供给 count 的表达式仅用于测试它是否为 NULL,并且 count 返回每个组的非空值数量;如果您省略子句
group by
,则组是所有行。对于这种情况,您不仅想要count(1)
分组,还想要选择 my_isp。所以:
在每个表内进行计数并求和可能会更有效: