MySQL查询问题:执行MIN(Price)未返回对应最低价产品名,如何解决?
解决MySQL中MIN(Price)与对应产品名称不匹配的问题
你当前的查询 SELECT MIN(Price), ProductName FROM Products; 返回任意产品名称的原因是:当使用聚合函数(如MIN())但未对非聚合列(ProductName)做分组或关联匹配时,MySQL会随机选取表中某一行的ProductName值返回,而非对应最低价格的那一行。
以下是几种可行的调整方案:
子查询匹配最低价格
先通过子查询获取最低价格,再筛选出价格等于该值的产品,能返回所有价格同为最低的产品:SELECT ProductName, Price FROM Products WHERE Price = (SELECT MIN(Price) FROM Products);排序后取首行
通过ORDER BY按价格升序排序,再用LIMIT取第一行,适合只需要一个最低价产品的场景(若有多个最低价产品,仅返回其中一个):SELECT ProductName, Price FROM Products ORDER BY Price ASC LIMIT 1;窗口函数排名(MySQL 8.0+)
利用RANK()窗口函数给价格排名,筛选出排名为1的产品,同样能返回所有最低价产品,适合较高版本的MySQL:SELECT ProductName, Price FROM ( SELECT ProductName, Price, RANK() OVER (ORDER BY Price ASC) AS price_rank FROM Products ) AS ranked_products WHERE price_rank = 1;
内容的提问来源于stack exchange,提问作者grafeno30
相关产品推荐
相关产品推荐

