我正在开发一个项目,我必须将两个表放在一起比较并计算出现次数的总和。在这个例子中,我将使用 name 作为我想要比较的键。我已经使用 Union all 和 Count(*) 但它不会给我所需的输出。
table 苹果
+----+-------+---------+
| Id | Name | Surname |
+----+-------+---------+
| 1 | Adam | Jaxon |
| 2 | Adam | Brixton |
| 3 | Brian | Simpson |
| 4 | Adam | Steper |
| 5 | Brian | Bastion |
+----+-------+---------+
表橙
+----+-------+---------+
| id | name | surname |
+----+-------+---------+
| 1 | Adam | Thompson|
| 2 | Brian | Coach |
| 3 | Jhon | Sinded |
+----+-------+---------+
Adam 有一个名字匹配,Brian 有一个匹配,所以我希望收到的期望输出是
+-------+
| Total |
+-------+
| 3 |
| 1 |
+--------+
我使用的查询与回答该问题的人类似,但有一些变化。不幸的是,这仅返回每个名称的匹配数
SELECT COUNT(*)
FROM
(
SELECT Name
FROM
apple
UNION ALL
SELECT
NAME
FROM
orange
) as named
GROUP BY name
+----------+
| Count(*) |
+----------+
| 2
| 3
+----------+
最佳答案
尝试一下,分组并计数名称:
SELECT
id,
name,
surname
count(1) as total
FROM
(
SELECT
id,
name,
surname
FROM apple
UNION ALL
SELECT
id,
name,
surname
FROM orange
)
GROUP BY name
更新
在查询之前对所有结果求和:
SELECT sum(total)
FROM (
SELECT
id,
name,
surname
count(1) as total
FROM
(
SELECT
id,
name,
surname
FROM apple
UNION ALL
SELECT
id,
name,
surname
FROM orange
)
GROUP BY name
)
关于mysql - 比较两个表中的两列并返回匹配项的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37004341/