sql – 当我们在联接中使用聚合函数时如何使用Group By子句?

我想加入三个表并计算表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引擎不知道它应为该类列返回哪个值.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03