sql – 当我们在联接中使用聚合函数时如何使用Group By子句?
发布时间:2020-12-12 08:48:07 所属栏目:MsSql教程 来源:网络整理
导读:我想加入三个表并计算表A的总和(数量). 我试了一下,得到了想要的输出.但我仍然混淆基于聚合函数和Group By子句. 在通过连接两个或多个表来计算总和值时,我们需要在Group By子句中提及哪些列,为什么我们需要提供这些列? 例如:这是我的表和所需的查询. TableA
我想加入三个表并计算表A的总和(数量).
我试了一下,得到了想要的输出.但我仍然混淆基于聚合函数和Group By子句. 在通过连接两个或多个表来计算总和值时,我们需要在Group By子句中提及哪些列,为什么我们需要提供这些列? 例如:这是我的表和所需的查询. TableA: ItemID,JobOrderID,CustomerID,DivisionID,Quantity TableB: ItemID,ItemName,SpecificationID TableC: SpecificationID,SpecificationName TableD: DivisionID,DivisionName TableE: JobOrderID,JobOrderNo. TableF: CustomerID,CustomerName 我想根据ItemID,JobOrderID和DivisionID获得Sum(Quantity). 我写了以下查询,它工作正常.但是,如果我删除Group By子句中的任何列,则它不会提供所需的结果.为什么? Group By子句在这里做什么?如何在使用Aggregate函数时指定Group By子句?这是我的查询. SELECT B.ItemName + ' - ' + C.SpecificationName AS 'ItemName',SUM(A.Quantity) AS 'Quantity',A.ItemID,D.DivisionName,F.CustomerName,E.JobOrderNo,A.DivisionID,A.JobOrderID,A.CustomerID FROM TableA A INNER JOIN TableB B ON B.ItemID = A.ItemID INNER JOIN TableC C ON C.SpecificationID = B.SpecificationID INNER JOIN TableD D ON D.DivisionID = A.DivisionID LEFT JOIN TableE E ON E.JobOrderID = A.JobOrderID LEFT JOIN TableF F ON F.CustomerID = A.CustomerID WHERE A.ItemID = @ItemID GROUP BY A.ItemID,A.CustomerID,B.ItemName,C.SpecificationName 任何人请以此为例,对Group By Clause提出建议. 解决方法对于指定列的任何唯一组合,GROUP BY都会进行聚合(如sum,min等).如果未在GROUP BY子句或聚合函数中指定某个列名,则SQL引擎不知道它应为该类列返回哪个值.(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |