我受命执行以下查询来设计:
“在2019年售出的产品中(即至少售出一个产品),我们想知道售出最少产品的产品。您的表格必须显示:
我已经提供了数据库的屏幕快照。
实际上,我能够检索与售出的最小单位相对应的值[在这种情况下为95,但也无法在MS Access中显示与该值相对应的产品名称。
使用以下代码显示正确的最小值:
SELECT MIN(UnitsSold)
FROM
(SELECT Products.ProductID, ProductName, Categories.CategoryID, CategoryName, SUM(Quantity) AS UnitsSold
FROM Orders, OrderDetails, Products, Categories
WHERE Orders.OrderID = OrderDetails.OrderID AND OrderDetails.ProductID = Products.ProductID And Products.CategoryID = Categories.CategoryID AND OrderDate BETWEEN #01/01/2019# AND #12/31/2019#
GROUP BY Products.ProductID, ProductName, Categories.CategoryID, CategoryName
HAVING SUM(Quantity) >= 1);
但是当我尝试同时显示具有此修改的产品时:
SELECT MIN(UnitsSold, Products.ProductID, ProductName
FROM
(SELECT Products.ProductID, ProductName, Categories.CategoryID, CategoryName, SUM(Quantity) AS UnitsSold
FROM Orders, OrderDetails, Products, Categories
WHERE Orders.OrderID = OrderDetails.OrderID AND OrderDetails.ProductID = Products.ProductID And Products.CategoryID = Categories.CategoryID AND OrderDate BETWEEN #01/01/2019# AND #12/31/2019#
GROUP BY Products.ProductID, ProductName, Categories.CategoryID, CategoryName
HAVING SUM(Quantity) >= 1);
我遇到错误:
您的查询未将指定的表达式'ProductID'作为聚合函数的一部分包含在内
为什么不只使用ORDER BY
和TOP 1
:
SELECT TOP (1)
Products.ProductID,
ProductName,
Categories.CategoryID,
Categories.CategoryName,
FROM
Orders
INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID
INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID
WHERE OrderDate BETWEEN #01/01/2019# AND #12/31/2019#
GROUP BY
Products.ProductID,
ProductName,
Categories.CategoryID,
CategoryName
HAVING SUM(Quantity) >= 1
ORDER BY SUM(Quantity) DESC