sql - 使用MIN函数

时间:2016-12-05 21:16:12

标签: sql sql-server aggregate-functions

我正在尝试在SQL中使用MIN函数,但我不断获取很多行,而不仅仅是MIN行。

我正在使用本教程http://www.w3schools.com/SQl/trysql.asp?filename=trysql_func_min

运行此查询

SELECT 
    P.ProductID, 
    MIN(Price) AS SmallestOrderPrice 
FROM Products P 
GROUP BY ProductID;

我想从所有价格中获得具有最低价格的行,并且它是相应的产品。如果多个产品的价格相同,我希望它能退回两个产品。

3 个答案:

答案 0 :(得分:2)

也许你想要所有产品的产品和最低价格。

窗口功能方式。

SELECT *
FROM (SELECT P.ProductID, Price AS SmallestOrderPrice, row_number() over (order by price asc ) RN
      FROM Products P)
WHERE RN = 1  

或者我的旧标准......(通常适用于所有平台,如果您需要第二张表中的数据,则无用),

SELECT * 
FROM  products P
INNER JOIN  (Select min(price) mp from products) P2
 on P.Price = P2.MP

或使用exists方法...(通常符合所有DBMS并且可能最快)

   SELECT P.* 
   FROM  products P
   WHERE EXISTS (SELECT min(price) mp 
               FROM products P2 
               WHERE P2.Price = P.Price)

我不确定它是否会起作用,但它似乎应该

SELECT 
    P.ProductID, 
    MIN(Price) AS SmallestOrderPrice 
FROM Products P 
GROUP BY ProductID
HAVING min(Price) = price

答案 1 :(得分:2)

以下是您的查询,其中添加了TOP 1ORDER BY Price ASC

ORDER BY将导致您的当前退货按ASCending顺序排序,将最小的价格放在顶部。然后TOP 1会将其限制为最小的价格。

SELECT TOP 1
    P.ProductID, 
    MIN(Price) AS SmallestOrderPrice 
FROM Products P 
GROUP BY ProductID
ORDER BY Price ASC;

请注意,如果有多个产品具有相同的最低价格,则不会返回所有产品。在这种情况下,xQbert的查询可能是最好的。

答案 2 :(得分:0)

所有行的最低价格。

    SELECT MIN(Price)
    FROM Products

如果你想要所有的身份证

SELECT
p.ProductID
, mp.MinPrice AS SmallestOrderPrice
FROM
    Products P
    CROSS APPLY (SELECT MIN(Price) MinPrice FROM Products ) AS mp
WHERE
    p.Price = mp.MinPrice