显示产品的最小销售量为SQL

问题描述 投票:0回答:1

我受命执行以下查询来设计:

“在2019年售出的产品中(即至少售出一个产品),我们想知道售出最少产品的产品。您的表格必须显示:

  • 产品ID
  • 产品名称
  • 产品的类别名称“

我已经提供了数据库的屏幕快照。

实际上,我能够检索与售出的最小单位相对应的值[在这种情况下为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'作为聚合函数的一部分包含在内

SQL DataBase

sql sql-server ms-access ms-access-2010 ms-access-2016
1个回答
0
投票

为什么不只使用ORDER BYTOP 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
© www.soinside.com 2019 - 2024. All rights reserved.