联接中的SQL查询求和

联接中的SQL查询求和,sql,Sql,我有两张桌子 表1: ╔══════╦══════════╦═════════╗ ║ Name ║ Date ║ Revenue ║ ╠══════╬══════════╬═════════╣ ║ A ║ 1/1/2001 ║ 20 ║ ║ A ║ 1/2/2001 ║ 20 ║ ║ B ║ 1/1/2001 ║ 40 ║ ╚══════╩══════════╩═════════╝ ╔══════╦══════╗ ║ Name ║ Tas

我有两张桌子

表1:

╔══════╦══════════╦═════════╗
║ Name ║   Date   ║ Revenue ║
╠══════╬══════════╬═════════╣
║  A   ║ 1/1/2001 ║   20    ║
║  A   ║ 1/2/2001 ║   20    ║
║  B   ║ 1/1/2001 ║   40    ║
╚══════╩══════════╩═════════╝
╔══════╦══════╗
║ Name ║ Task ║
╠══════╬══════╣
║  A   ║ Call ║
║  A   ║ Foo  ║
║  B   ║ Bar  ║
╚══════╩══════╝
表2:

╔══════╦══════════╦═════════╗
║ Name ║   Date   ║ Revenue ║
╠══════╬══════════╬═════════╣
║  A   ║ 1/1/2001 ║   20    ║
║  A   ║ 1/2/2001 ║   20    ║
║  B   ║ 1/1/2001 ║   40    ║
╚══════╩══════════╩═════════╝
╔══════╦══════╗
║ Name ║ Task ║
╠══════╬══════╣
║  A   ║ Call ║
║  A   ║ Foo  ║
║  B   ║ Bar  ║
╚══════╩══════╝
所以我加入了

SELECT sum(Revenue), t2.Name, T2.Task
FROM Table_1 as t1 JOIN Table_2 as t2 ON t1.Name = t2.Name
GROUP BY t2.Name
联接的结果表如下所示:

Result
Name    Sum
A       80
B       40
问题是我希望A的和结果是40。如何修改查询?

使用此查询:

SELECT Name, SUM(Revenue)
FROM Table_1
GROUP BY Name
我看不出将
表1
连接到
表2
有任何意义,因为您没有使用
任务
列。

使用此查询:

SELECT Name, SUM(Revenue)
FROM Table_1
GROUP BY Name

我看不出将
表1
连接到
表2
有任何意义,因为您没有使用
任务
列。

问题的根源在于连接没有完成您期望它完成的任务。通过在“名称”上的两个表之间进行连接,您正在创建重复项。删除查询中的GROUPBY子句,您将完全明白我的意思

正如前面的回答中提到的,连接(在本例中)是多余的。我建议你更仔细地看问题。如何对数据进行结构化以避免数据重复


如果没有更多的数据,我无法为您提供更多的方向,但希望我的评论将为您指明正确的方向,您将在使用离散键值方面学到宝贵的一课。

问题的根源在于联接没有达到您期望的效果。通过在“名称”上的两个表之间进行连接,您正在创建重复项。删除查询中的GROUPBY子句,您将完全明白我的意思

正如前面的回答中提到的,连接(在本例中)是多余的。我建议你更仔细地看问题。如何对数据进行结构化以避免数据重复


如果没有更多的数据,我无法为您提供更多的方向,但希望我的评论将为您指明正确的方向,您将在使用离散键值方面学到宝贵的一课。

在加入表之前,您必须计算总和,如:

    select t1.Name, t1.sum, t2.task from
    (
      SELECT Name, sum(Revenue) as sum FROM Table_1 group by Name
    ) as t1 
   JOIN 
   Table_2 as t2 ON t1.Name = t2.Name

在加入表之前,必须计算总和,如:

    select t1.Name, t1.sum, t2.task from
    (
      SELECT Name, sum(Revenue) as sum FROM Table_1 group by Name
    ) as t1 
   JOIN 
   Table_2 as t2 ON t1.Name = t2.Name

也许他用它作为一个过滤器,即只显示表2中也存在的行。你还应该解释为什么他在查询中得到80,这是一个很好的教学机会。他得到80,因为当他加入name时,它返回4行,其中name=a(表1中的2行乘以表2中的2行)。4 * 20 = 80@Kyle你当然是对的。感谢您指出这一点。忘记将Task添加到select子句。可能他将其用作筛选器,即仅显示表2中也存在的行。您还应该解释为什么他在查询中得到80,这是一个很好的教学机会。他得到80,因为当他按name加入时,它返回4行,其中name=a(表_1中的2行乘以表_2中的2行)。4*20=80@Kyle您当然是对的。谢谢您指出这一点。忘记将任务添加到select子句。忘记将任务添加到select子句