不在聚合函数或按子句分组中:org.hsqldb.Expression@59bcb2b6在声明中



我正在尝试对SUM(OrderDetails.Quantity(进行分组,但一直收到错误不在聚合函数或逐子句分组中: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

我试图创建一个表格,显示客户和他们订购的产品数量,同时还显示他们的CompanyName和ContactName。

写这个:

GROUP BY OrderDetails.CustomerID, Customers.CompanyName, Customers.ContactName

与MySQL、PostgreSQL和标准SQL不同,在大多数其他SQL方言中,如果您还想在SELECT子句或其他地方投影函数依赖列,则仅通过主键进行分组是不够的。您必须显式地GROUP BY所有要投影的列。

不要从订单表中获取客户id。把它从顾客桌上拿下来。如果你这样做,这个可能在你的数据库中工作:

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.CustomerIdOrderDetails中不是唯一的。许多数据库不支持这一点,因此在这些数据库中需要额外的列:

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;

即便如此,从同一个表中提取所有列要好得多。这将允许SQL优化器在Customers上使用索引。

相关内容

最新更新