SQL 选择连接表的总和

问题描述 投票:0回答:3

我有两张桌子。工作和零件。一项工作可以有很多部分。

我想列出所有作业,然后用一列显示该作业的各个部分的总和。

我的代码(在 Firebird 中)如下。我刚刚收到错误 - 选择列表中的表达式无效(不包含在聚合函数或 GROUP BY 子句中)。

谢谢你。

SELECT J.ID, J.REF, J.CUST, J.DATEADDED, Sum(P.QTYREQ)
FROM JOBS J
Join PARTS P 
    on J.ID = P.JOBID 
Group by J.ID
sql join sum firebird
3个回答
0
投票

当您将 SUM() 与其他元素一起放入“选择”部分时,您需要指定所有非聚合元素的分组方式。所以:

SELECT J.ID, J.REF, J.CUST, J.DATEADDED, SUM(P.QTYREQ) AS TotalParts 
FROM JOBS J 
JOIN PARTS P ON J.ID = P.JOBID 
GROUP BY J.ID, J.REF, J.CUST, J.DATEADDED;

0
投票

了解当您使用聚合函数(如

SUM
)时,您需要在
GROUP BY
子句中包含所有非聚合列,这一点很有用。在您的情况下,
SELECT
列表中且未聚合的所有列都需要成为
GROUP BY
子句的一部分,如下所述:

SELECT J.ID, J.REF, J.CUST, J.DATEADDED,SUM(P.QTYREQ) AS TotalParts
FROM JOBS J
JOIN PARTS P 
ON J.ID = P.JOBID 
GROUP BY J.ID, J.REF, J.CUST, J.DATEADDED

这将确保所有不属于

SUM
函数的列都包含在
GROUP BY
子句中。希望这能解决您的问题。


0
投票

选择列表中的列应作为

group by
aggregatefunction
的一部分。阅读此处以更好地理解https://www.sqlshack.com/an-overview-of-the-sql-group-by-clause/

© www.soinside.com 2019 - 2024. All rights reserved.