mysql - SQL 组合跨多个表的两个选择

标签 mysql sql select join

所以我有这些表:

表 1:

facilities   emails
Fac 1        fac1@email.com
Fac 2        fac2@email.com
Fac 1 RE     fac1@email.com

表 2:

facilities  emails
fac1        fac1@email.com
fac2        fac3@email.com

现在,在这两个表上,我试图找出有多少设施正在使用每个地址电子邮件。我有两个 sql 查询可以做到这一点:

SELECT ce.email, count(*)  
AS TOTAL_FACILITIES 
FROM table1 
AS ce 
GROUP BY ce.email
ORDER BY TOTAL_FACILITIES DESC

SELECT ca.emails, count(*)  
AS TOTAL_FACILITIES 
FROM table2 
AS ca 
GROUP BY ca.emails
ORDER BY TOTAL_FACILITIES DESC

这为我提供了每张 table 的不同电子邮件以及有多少设施使用它们。我现在尝试使用连接将其合并为一个调用,但我似乎不知道如何使计数工作。

有什么建议吗?

最佳答案

您可能想要UNION它。

SELECT ce.email, count(*) AS TOTAL_FACILITIES 
FROM table1 AS ce 
GROUP BY ce.email
UNION
SELECT ca.emails, count(*) AS TOTAL_FACILITIES 
FROM table2 AS ca 
GROUP BY ca.emails
ORDER BY TOTAL_FACILITIES DESC

更好的解决方案是在聚合之前对其进行 UNION。

SELECT email, COUNT(*) AS TOTAL_FACILITIES
FROM (
    SELECT facilities, email
    FROM table1
    UNION ALL
    SELECT facilities, email
    FROM table2
)
GROUP BY email
ORDER BY TOTAL_FACILITIES DESC

关于mysql - SQL 组合跨多个表的两个选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660835/

相关文章:

php - 将 Android 设备连接到 Apache 服务器

php - 在PHP中查看mysql表中某个链接字段的数据

mysql - 获取 SQL 结果中的行号

mysql - 将自动增量主键插入现有表

java - 如何使用 Java NamedParameterJdbcTemplate 查询潜在的空值

MySQL CTE - 是否可以迭代数字范围?

MYSQL根据年龄范围选择生日

mysql - 选择值 AS (desc) 在子查询中不起作用

sql - Oracle SQL - 在字段中查找特殊非数字字符

mysql - 需要缺席和出席人数以及月份名称