mysql查询获得最低价格的产品名称[duplicate]

kzipqqlq  于 2022-11-21  发布在  Mysql
关注(0)|答案(3)|浏览(207)

此问题在此处已有答案

How to select data where a field has a min value in MySQL?(8个答案)
4天前关闭。
当我执行下列查询时,会出现任何产品的名称,但不会出现价格最低的产品:

SELECT MIN(Price), ProductName
FROM Products;

如何查看***价格最低的产品名称?***
提前感谢!

prdp8dxp

prdp8dxp1#

请考虑以下查询:

SELECT MIN(Price), MAX(Price), ProductName
FROM Products;

它应该显示哪个产品?这个怎么样:

SELECT AVG(Price), ProductName
FROM Products;

不一定有产品的价格正好是平均值,那么应该显示哪个产品呢?
如果有多个产品并列最低价格怎么办?
产生这些问题的根本原因,也就是您在问题中所描述的原因,是因为查询不明确。您无法编写一个SQL查询来神奇地知道要显示哪个产品,因为该查询没有逻辑地描述列之间的关系。
此查询在大多数SQL数据库中都不是法律的的SQL。只有当您使用过时的SQL模式时,它才在MySQL中合法。此SQL模式在MySQL的现代版本中默认为禁用,因此您显示的查询应该返回错误。
有几种解决方案可以获得所需的结果。下面是一些示例:

SELECT Price, ProductName FROM Products ORDER BY Price LIMIT 1;

SELECT Price, ProductName
FROM (
  SELECT Price, ProductName, RANK() OVER (ORDER BY Price) AS rnk
  FROM Products
) AS t
WHERE rnk = 1;

SELECT p1.Price, p1.ProductName
FROM Products AS p1
LEFT OUTER JOIN Products AS p2
  ON p1.Price > p2.Price
WHERE p2.Price IS NULL;

另请参阅我对选择列表中列无效的原因的回答,因为它既未包含在聚合函数中,也未包含在GROUP BY子句中
我也在我的书SQL Antipatterns Volume 1: Avoiding the Pitfalls of Database Programming的“模糊组”一章中写了这个主题。

zvokhttg

zvokhttg2#

SELECT Price, ProductName FROM Products ORDER BY Price ASC LIMIT 1

SELECT Price, ProductName FROM Products  WHERE Price = 
(SELECT MIN(Price) FROM Products

SELECT
 Price, ProductName
FROM Products S inner join (select min(Price)  from Products) mn
  on S.Price = mn.Price
roejwanj

roejwanj3#

SELECT 'productName' 
FROM Products 
ORDER BY Price LIMIT 1

感谢@akina

相关问题