【问题标题】:SQL aggregate functions and Group BySQL 聚合函数和 Group By
【发布时间】:2012-03-28 10:39:21
【问题描述】:

员工
员工编号
员工姓名
empStoreNum

发票
invNo
库存量
员工身份

我在 Employee 和 Invoice 上方有两个表格。我想设置一个查询来检索员工姓名、员工商店编号和每位员工的总销售额。我在下面发出了一个查询,它可以工作,但我无法检索员工商店编号。

SELECT Emp.empName, Sum(Inv.invAmount) AS totalSales
  FROM Invoice AS Inv INNER JOIN Employee AS Emp ON Inv.empId = Emp.empId
 GROUP BY Emp.empName

如果我将 Emp.empStoreNum 添加到 SELECT 中,我会收到以下错误:“您尝试执行的查询不包括指定表达式‘empStoreNum’作为聚合函数的一部分。”如何修改查询以获取员工商店编号?

【问题讨论】:

  • 那是什么? MySQL、SQL Server 还是 Access?语法不同,您应该使用实际适用于您的问题的标签,而不仅仅是抓住所有模糊适用的标签。可以这样想:您有一个会说一种语言的朋友,而您的问题是“我该怎么说 ?”。用你朋友说的语言(例如西班牙语)而不是法语、英语、西班牙语和德语来标记它不是更好吗?
  • @KenWhite:如果我不得不猜测,用户正在从它“工作”的 MySQL 转移到 MS SQL Server(或 MS Access,或两者),因为两者之间的区别MySQL 和世界上大多数其他地方 w.r.t GROUP BY 列表。但这是一个猜测。

标签: sql sql-server ms-access


【解决方案1】:

选择列表中的所有非聚合列都必须列在 GROUP BY 子句中(除非您使用 MySQL,它遵循一组非常不同的规则,或者除非您使用的是最新版本的 PostgreSQL ,可以推导出函数依赖)。

SELECT Emp.empName, Emp.empStoreNum, Sum(Inv.invAmount) AS totalSales
  FROM Invoice AS Inv INNER JOIN Employee AS Emp ON Inv.empId = Emp.empId
 GROUP BY Emp.empName, Emp.empStoreNum

【讨论】:

    【解决方案2】:

    尝试将 empStoreNum 添加到 GROUP BY

    SELECT Emp.empName, Emp.empStoreNum, Sum(Inv.invAmount) AS totalSales
    FROM Invoice AS Inv INNER JOIN Employee AS Emp ON Inv.empId = Emp.empId
    GROUP BY Emp.empName, Emp.empStoreNum
    

    【讨论】:

      【解决方案3】:

      将第二列添加到您的组中

      【讨论】:

      • 我想对你的答案投赞成票;你在那里有答案的核心,但解释真的有点太简洁了,不能保证投票。
      • 没问题。重要的是你得到了答案:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2014-08-24
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多