不在聚合函数或 group by 子句中:org.hsqldb.Expression@59bcb2b6 在语句中
Not in aggregate function or group by clause: org.hsqldb.Expression@59bcb2b6 in statement
我正在尝试对 SUM(OrderDetails.Quantity) 进行分组,但一直收到错误 Not in aggregate function or group by clause: org.hsqldb.Expression@59bcb2b6 在声明中 但是因为我已经有一个 GROUP BY 部分我不知道我错过了什么
SQL 声明:
SELECT OrderDetails.CustomerID, Customers.CompanyName, Customers.ContactName, SUM(OrderDetails.Quantity)
FROM OrderDetails INNER JOIN Customers ON OrderDetails.CustomerID = Customers.CustomerID
WHERE OrderDetails.CustomerID = Customers.CustomerID
GROUP BY OrderDetails.CustomerID
ORDER BY OrderDetails.CustomerID ASC
我正在尝试创建一个 table 来显示客户和他们订购的产品数量,同时还显示他们的公司名称和联系人姓名。
这样写:
GROUP BY OrderDetails.CustomerID, Customers.CompanyName, Customers.ContactName
与 MySQL、PostgreSQL 和标准 SQL 不同,在大多数其他 SQL 方言中,仅按主键分组是不够的,如果您还希望在 SELECT
子句或其他地方投影功能相关的列。您必须明确 GROUP BY
所有要投影的列。
不要从订单中获取客户 ID table。从客户那里拿走 table。如果您这样做,可能在您的数据库中工作:
SELECT c.CustomerID, c.CompanyName, c.ContactName, SUM(od.Quantity)
FROM OrderDetails od INNER JOIN
Customers c
ON od.CustomerID = c.CustomerID
GROUP BY c.CustomerID
ORDER BY c.CustomerID ASC;
注意WHERE
子句不需要重复ON
子句中的条件。
您的版本无法在标准 SQL 中运行,因为 od.CustomerId
在 OrderDetails
中不是唯一的。许多数据库不支持这个,所以在这些数据库中你需要额外的列:
SELECT c.CustomerID, c.CompanyName, c.ContactName, SUM(od.Quantity)
FROM OrderDetails od INNER JOIN
Customers c
ON od.CustomerID = c.CustomerID
GROUP BY c.CustomerID, c.CompanyName, c.ContactName
ORDER BY c.CustomerID ASC;
即便如此,从同一个 table 中获取所有列要好得多。这将允许 SQL 优化器在 Customers
.
上使用索引
我正在尝试对 SUM(OrderDetails.Quantity) 进行分组,但一直收到错误 Not in aggregate function or group by clause: org.hsqldb.Expression@59bcb2b6 在声明中 但是因为我已经有一个 GROUP BY 部分我不知道我错过了什么
SQL 声明:
SELECT OrderDetails.CustomerID, Customers.CompanyName, Customers.ContactName, SUM(OrderDetails.Quantity)
FROM OrderDetails INNER JOIN Customers ON OrderDetails.CustomerID = Customers.CustomerID
WHERE OrderDetails.CustomerID = Customers.CustomerID
GROUP BY OrderDetails.CustomerID
ORDER BY OrderDetails.CustomerID ASC
我正在尝试创建一个 table 来显示客户和他们订购的产品数量,同时还显示他们的公司名称和联系人姓名。
这样写:
GROUP BY OrderDetails.CustomerID, Customers.CompanyName, Customers.ContactName
与 MySQL、PostgreSQL 和标准 SQL 不同,在大多数其他 SQL 方言中,仅按主键分组是不够的,如果您还希望在 SELECT
子句或其他地方投影功能相关的列。您必须明确 GROUP BY
所有要投影的列。
不要从订单中获取客户 ID table。从客户那里拿走 table。如果您这样做,可能在您的数据库中工作:
SELECT c.CustomerID, c.CompanyName, c.ContactName, SUM(od.Quantity)
FROM OrderDetails od INNER JOIN
Customers c
ON od.CustomerID = c.CustomerID
GROUP BY c.CustomerID
ORDER BY c.CustomerID ASC;
注意WHERE
子句不需要重复ON
子句中的条件。
您的版本无法在标准 SQL 中运行,因为 od.CustomerId
在 OrderDetails
中不是唯一的。许多数据库不支持这个,所以在这些数据库中你需要额外的列:
SELECT c.CustomerID, c.CompanyName, c.ContactName, SUM(od.Quantity)
FROM OrderDetails od INNER JOIN
Customers c
ON od.CustomerID = c.CustomerID
GROUP BY c.CustomerID, c.CompanyName, c.ContactName
ORDER BY c.CustomerID ASC;
即便如此,从同一个 table 中获取所有列要好得多。这将允许 SQL 优化器在 Customers
.