尝试使用带SUM函数的内部联接和SQL分组,但不起作用

尝试使用带SUM函数的内部联接和SQL分组,但不起作用,sql,select,join,group-by,inner-join,Sql,Select,Join,Group By,Inner Join,我不明白这一点,不知道是否有人能帮我解决这个问题 我有两个表叫做RES_DATA和INV_DATA RES_数据包含我的客户,如下所示 CUSTOMER ID | NAME 1, Robert 2, John 3, Peter 库存数据包含其发票,如下所示 INVOICE ID | CUSTOMER ID | AMOUNT 100, 1, £49.95 200, 1, £105.95 300, 2, £400.00 400, 3, £150.00 500, 1, £25.00 我正在尝试

我不明白这一点,不知道是否有人能帮我解决这个问题

我有两个表叫做RES_DATA和INV_DATA

RES_数据包含我的客户,如下所示

CUSTOMER ID | NAME

1, Robert
2, John
3, Peter
库存数据包含其发票,如下所示

INVOICE ID | CUSTOMER ID | AMOUNT

100, 1, £49.95
200, 1, £105.95
300, 2, £400.00
400, 3, £150.00
500, 1, £25.00
我正在尝试写一个SELECT语句,它将给出如下结果

CUSTOMER ID | NAME | TOTAL AMOUNT

1, Robert, £180.90
2, John, £400.00
3, Peter, £150.00
我想我需要2个内部联接来添加表和按Customer表分组的INVOICES表的总和值,但老实说,我认为我缺少了一些东西。甚至不能接近我需要的结果。

这应该可以

SELECT a.[CUSTOMER ID], a.[NAME], SUM(b.[AMOUNT]) AS [TOTAL AMOUNT]
FROM RES_DATA a INNER JOIN INV_DATA b
ON a.[CUSTOMER ID]=b.[CUSTOMER ID]
GROUP BY a.[CUSTOMER ID], a.[NAME]
我使用SQL Fiddle对SQL Server 2008进行了测试:

基本上,这里发生的情况是,由于连接,您将从左侧的RES_数据表中获得与右侧每一行相同的行,即具有相同[CUSTOMER ID]值的INV_数据表。当您仅按左侧的列分组,然后仅对右侧的[AMOUNT]列求和时,它会保持左侧的一行不变,并对右侧的匹配值求和。

使用子查询

选择*从库存数据内部联接选择[CUSTOMER ID],通过库存数据上的[CUSTOMER ID]T对库存数据组中的[TOTAL AMOUNT]求和[CUSTOMER ID]=T.[CUSTOMER ID]

两种方法

分组

SELECT RES.[CUSTOMER ID], RES,NAME, SUM(INV.AMOUNT) AS [TOTAL AMOUNT]
FROM RES_DATA RES
JOIN INV_DATA INV ON RES.[CUSTOMER ID] INV.[CUSTOMER ID]
GROUP BY RES.[CUSTOMER ID], RES,NAME
结束


如果您需要检索除列中的列以外的多个列,则可以考虑下面的查询。检查一次它是否运行良好

SELECT 
a.[CUSTOMER ID], 
a.[NAME], 
(select SUM(b.[AMOUNT]) from INV_DATA b
where b.[CUSTOMER ID] = a.[CUSTOMER ID]
GROUP BY b.[CUSTOMER ID]) AS [TOTAL AMOUNT]
FROM RES_DATA a

什么样的SQL?SQL Server?非常感谢您第一次使用的roryap。现在要明白这一点@用户3526836-不客气。我已经更新了我的答案,以便更清楚地说明发生了什么。希望有帮助。之所以也包含[NAME]是因为具有这些属性的元组被重复。我说的对吗?如果性能是一个因素,那么如何优化解决方案?这个答案将影响^2性能,如操作。对于一组人或超过该组的人来说,他们将被选中,但他正在寻找结果,不适用于性能。如果您在同一个表中加入,以便在表中的某个列中为表中的每一行获取group by,则此解决方案效果良好。此解决方案存在严重的性能问题。请不要考虑这个解决方案。
SELECT 
a.[CUSTOMER ID], 
a.[NAME], 
(select SUM(b.[AMOUNT]) from INV_DATA b
where b.[CUSTOMER ID] = a.[CUSTOMER ID]
GROUP BY b.[CUSTOMER ID]) AS [TOTAL AMOUNT]
FROM RES_DATA a