【问题标题】:Compare two columns from two tables and return SUM of matches比较两个表中的两列并返回匹配的总和
【发布时间】:2023-03-04 09:00:01
【问题描述】:

我正在做一个项目,我必须将两个表一起比较并求和出现的次数。对于这个例子,我将使用 name 作为我想要比较的键。我使用了 Union all 和 Count(*) 但它不会给我想要的输出。

餐桌苹果

+----+-------+---------+
| 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
+----------+

【问题讨论】:

  • 苹果中有三个亚当,橙子中有两个亚当。这会被视为计数 1 吗?
  • 来吧。向我们展示一些努力。
  • 为什么不考虑surname?
  • @rocks 一定是 - 结果怎么可能是 2?

标签: mysql sql database compare


【解决方案1】:

试试吧,分组和计数名称:

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
)

【讨论】:

  • 这完成了我的 sql 查询之前所做的事情,但是将 union 更改为 union all 会给出正确的匹配数。唯一的问题是我需要 SUMed 的数字。
  • 我改成我的答案,你可以在查询结果之前对你的计数求和,基本上,我添加一个新的选择与最后一个查询计数相加
【解决方案2】:

没有可用的数据库服务器,因此尚未对其进行测试 - 但是应该可以解决问题:

SELECT COUNT(*) FROM
(
    SELECT DISTINCT apple.name FROM apple
        JOIN orange ON apple.name = orange.name
);

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 1970-01-01
    • 2020-12-19
    • 2012-05-09
    • 2015-11-30
    • 2016-12-23
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多