当前位置: 首页 > 面试题库 >

当我们在Joins中使用Aggregate函数时,如何使用Group By子句?

东门翰
2023-03-14
问题内容

我想加入三个表并计算表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

我想根据获得的总和(数量)ItemIDCustomerIDJobOrderIDDivisionID

我写了以下查询,它工作正常。但是,如果我删除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.JobOrderID,
            A.DivisionID,
            A.CustomerID,
            D.DivisionName,
            F.CustomerName,
            E.JobOrderNo,
            B.ItemName,
            C.SpecificationName

任何人都可以以“ Group by Clause”为例提出建议。


问题答案:

GROUP BY对于指定列的任何唯一组合,都会进行汇总(例如sum,min等)。如果未在GROUP BY子句或聚合函数中指定某些列名,则SQL引擎将未知该列名,该值应针对该类型的列返回。



 类似资料:
  • 我是Android新手,我正在尝试使用UI线程,所以我写了一个简单的测试活动。但我想我误解了什么,因为点击按钮,应用程序不再响应

  • 问题内容: 我对熊猫还很陌生,所以我希望这将是一个简单的答案(我也感谢所有指向数据框设置的指针) 假设我有以下DataFrame: 现在,我想按“ gp”分组并获取“ vector”的均值 我试过了 乃至 但我收到一个错误,没有要聚合的“数字类型”。那么np.arrays在熊猫中不起作用吗? 问题答案: 对我来说,它有效: 我取两次平均值,因为您想要向量均值的均值组值(不是吗?)。 如果要使用均值

  • 本文向大家介绍我们如何在MySQL INSERT INTO命令中使用WHERE子句?,包括了我们如何在MySQL INSERT INTO命令中使用WHERE子句?的使用技巧和注意事项,需要的朋友参考一下 在插入新行的情况下,我们可以在INSERT INTO命令中使用条件插入,即WHERE子句。可以通过以下方式完成- 借助虚拟表 在这种情况下,我们将插入虚拟表中的值以及一些条件。语法可以如下- 示例

  • 我有以下代码块可以正常工作; 这给了我2个错误; 错误%1“System.Collections.ObjectModel.ObservableCollection.ObservableCollection(System.Collections.Generic.List)”的最佳重载方法匹配包含一些无效参数 错误2参数1:无法从“System.Linq.IQueryable>”转换为“System.

  • 问题内容: 我想在colab.research.google.com中使用Chrome的Selenium Webdriver进行快速处理。我可以使用安装Selenium,但chrome的webdriver需要通向webdriverChrome.exe的路径。我应该如何使用它? PS- colab.research.google.com是一个在线平台,可为与深度学习相关的快速计算问题提供GPU。请避

  • 问题内容: 到目前为止,我已经写了Aggregate函数,后跟Group By子句,以基于SUM,AVG和其他Aggregate函数查找值。我对Group By子句有些困惑。当我们使用Aggregate函数时,我需要在Group By子句中指定哪些列。否则,有没有使用Group By子句的方法来使用Aggregate函数。 问题答案: SELECT子句中没有聚合的所有列都必须位于GROUP BY中