我正在尝试在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;
我想从所有价格中获得具有最低价格的行,并且它是相应的产品。如果多个产品的价格相同,我希望它能退回两个产品。
答案 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 1
和ORDER 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