在连接中使用聚合函数时如何使用 Group By 子句?

2024-04-26

我想连接三个表并计算表 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, CustomerID, JobOrderID and DivisionID.

我编写了以下查询并且运行良好。但是,如果我删除 Group By 子句中的任何列,它不会给出所需的结果。为什么? Group By 子句在这里做什么?使用聚合函数时如何指定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 子句提出建议。


GROUP BY对于指定列的任何唯一组合进行聚合(如总和、最小值等)。如果您未在中指定某些列名称GROUP BY子句或聚合函数中的 SQL 引擎不知道应该为该类型的列返回哪个值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在连接中使用聚合函数时如何使用 Group By 子句? 的相关文章

  • SQL 与 LINQ 性能 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Laravel 5.4 上传原始文件名和扩展名

    通过表单提交文件时 如何将原始文件名 file jpg 上传到数据库 控制器 public function addCv Request request cv Cv create request gt all file request gt
  • MYSQL中如何获取不带小数的列值

    我的 mysql 表中有两列A and B我正在获取这样的记录 select A B from table 但问题是上面的查询提供了类似这样的值 12 00 3 4 78 9 但我想得到这样的结果 12 3 78 我将使用哪个 MySQL
  • Sequel Pro / MAMP 在哪里存储本地数据库?

    我通过 Sequel Pro 和 MAMP 在我的计算机上创建了一些数据库 并运行 localhost 来查看它们 但是 我全新安装了 Mac OS Lion 但忘记将数据库备份到 sql 文件 我会定期备份文件 并预装计算机的副本 有谁知
  • 使用 Oracle 中的 Join 查询进行更新

    查询有什么问题 它无限期地执行 UPDATE table1 t1 SET t1 col t1 Output SELECT t2 col t3 Output t2 col FROM tabl2 t3 LEFT JOIN table1 t2 O
  • 当从搜索表单动态构建 WHERE 子句时,如何防止 SQL 注入?

    我知道在 Java 中保护 SQL 查询免受 SQL 注入的唯一真正正确的方法是使用准备好的语句 然而 这样的语句要求基本结构 选择的属性 连接的表 WHERE条件的结构 不会改变 我这里有一个 JSP 应用程序 其中包含一个带有大约十几个
  • 选择返回动态列

    我有两个表 标准和服务产品 一个标准可以有多个服务产品 每个标准可以有不同数量的与其关联的服务产品 我需要做的是编写一个视图 该视图将返回一些常见数据 然后在一行上列出服务产品 例如 Standard Id Description SO 1
  • 连接2个表区分大小写

    我有 2 个表 需要获取品牌代码的结果 例如 在数据库中 我有两个不同的品牌 但它们的代码是相同的 只有小写和大写不同 例如 代码名称 关于耐克 和阿迪达斯 如何在代码上内连接 2 个表以分别获取这 2 个表 现在 在内连接之后我得到了这
  • 将内部联接和 where 子句添加到 INSERT INTO ON DUPLICATE KEY UPDATE

    我从 INSERT INTO ON DUPLICATE KEY UPDATE MySQL 语句开始 INSERT INTO Table1 field1 field2 VALUES 1 2 ON DUPLICATE KEY UPDATE fi
  • 在 CASE 语句中使用 CAST 时出现数据转换错误

    运行以下命令时出现错误 将数据类型 nvarchar 转换为 float 时出错 declare completeCommand nvarchar max x paramVal nvarchar 100 paramName nvarchar
  • 在 postgres 中选择时保留顺序[重复]

    这个问题在这里已经有答案了 在 psql 中 至少在 v9 中 如果我这样做 select id from users where id in 2 1 1 and select id from users where id in 1 2 它
  • 如何在MySQL中选择字段具有最小值的数据?

    我想从 MySQL 中的表中选择特定字段具有最小值的数据 我尝试过 SELECT FROM pieces WHERE MIN price 请问有什么帮助吗 这将为您提供所有记录中价格最低的结果 SELECT FROM pieces WHER
  • 使用 Reporting Services 将组保持在一页上

    我使用 Reporting Services 创建了一个报表作为 C 应用程序的一部分 但我找不到一些我习惯在其他环境中看到的功能 我相信 MS Access 和 Crystal 报表都有一个名为 保持在一起 的选项 这样您就可以将特定的数
  • SET IDENTITY_INSERT [表] ON 不起作用

    我想在指定 Id 的位置插入一些记录 以便将数据迁移到我想要保持现有关系完整性的位置 为此 我直接在 SSMS 中的表上运行以下命令 SET IDENTITY INSERT CRMTItem ON 然而 当我从 C 插入一个 Id 为 1
  • 通过 SQL 中的查询显示组中的非聚合列

    我在 SQL 2008 中有一个表 ID Items 1 A 1 B 2 C 3 D 3 B 我想得到的结果是 ID Items 1 A B 2 C 3 B D 我使用了游标 但它大大减慢了过程 我可以使用按查询分组或通过任何其他方式实现上
  • 从用户定义的函数调用 sql

    SQL Server 2008 是否可以从用户定义函数中的变量执行 sql 或者使用存储过程是唯一的解决方案 我有一条sql语句保存在variabele中 mySqlStatement select from someTable 我想从用户
  • db2:使用不同表上的选择更新多行和字段

    对于 A 的所有行 其中 A x B z 是否可以使用不同表 B c B d 的值 c 和 d 来增加表 A a 和 A b 的字段 a 和 b 我对这个查询感到疯狂 DB2 和 SQL 标准在 UPDATE 语句中没有 FROM 子句 所
  • 查询不可更新

    我正在尝试使用 BE SQL Server 2012 Express 中的记录更新本地 Access 2007 表 我的步骤在这里 SQL Server中存在带有4个参数的存储过程来获取所需的记录 Access VBA中有调用SP并进行临时
  • 访问:根据记录中的最新日期进行分组(嵌套查询)

    下表中的此查询 SELECT ID Value As of FROM Table a INNER JOIN SELECT ID MAX As of AS As of FROM Table GROUP BY ID b ON a ID b ID
  • SQL Server 中 SYSDATETIME 数据类型的准确性

    我已经在 SQL Server 2008 的存储过程中使用 SYSDATETIME 进行了一些测试 我设置了一个包含带有 IDENTITY 字段的 datetime2 7 的表 我了解这种数据类型的精度和准确度之间的差异 但是 在从此示例中

随机推荐