46

我想从 MySQL 中特定字段具有最小值的表中选择数据,我试过这个:

SELECT * FROM pieces WHERE MIN(price)

请问有什么帮助吗?

4

8 回答 8

74

这将为您提供所有记录中价格最低的结果。

SELECT *
FROM pieces
WHERE price =  ( SELECT MIN(price) FROM pieces )
于 2012-11-13T07:51:53.763 回答
60

假设我理解这个问题,我会这样做。

SELECT * FROM pieces ORDER BY price ASC LIMIT 1

如果您尝试选择多行,其中每行可能具有相同的最低价格,那么@JohnWoo 的回答就足够了。

基本上在这里,我们只是按价格升序 (ASC) 对结果进行排序,并获取结果的第一行。

于 2012-11-13T07:58:35.173 回答
5

这也有效:

SELECT
  pieces.*
FROM
  pieces inner join (select min(price) as minprice from pieces) mn
  on pieces.price = mn.minprice

(由于此版本没有子查询的 where 条件,如果您需要 UPDATE 表可以使用它,但如果您只需要 SELECT 我建议使用 John Woo 解决方案)

于 2012-11-13T08:06:53.840 回答
5

使用HAVING MIN(...)

就像是:

SELECT MIN(price) AS price, pricegroup
FROM articles_prices
WHERE articleID=10
GROUP BY pricegroup
HAVING MIN(price) > 0;
于 2014-05-17T12:34:41.567 回答
5

有效的方式(任意数量的记录):

SELECT id, name, MIN(price) FROM (select * from table order by price) as t group by id
于 2019-02-06T11:03:45.320 回答
3

事实上,取决于你想得到什么: - 只是最小值:

SELECT MIN(price) FROM pieces
  • 具有最小值的表(多行):正如 John Woo 上面所说的那样。

  • 但是,如果可以是具有相同最小值的不同行,最好是从另一列中对它们进行排序,因为之后或之后您将需要这样做(从 John Woo answere 开始):

    SELECT * FROM pieces WHERE price = ( SELECT MIN(price) FROM pieces) ORDER BY stock ASC

于 2016-03-10T18:48:21.593 回答
0

为了改进@sberry 的答案,如果该列有一个null值,那么只需做ORDER BY就会选择一个有null值的行。添加一个WHERE子句以获得正确的结果:

SELECT * FROM pieces 
WHERE price>0
ORDER BY price ASC 
LIMIT 1;

或者,如果有可能出现负值和/或VARCHAR等,请执行以下操作:

SELECT * FROM pieces 
WHERE price IS NOT NULL
ORDER BY price ASC 
LIMIT 1;
于 2022-03-05T16:20:17.813 回答
-8

为了让它更简单

SELECT *,MIN(price) FROM prod LIMIT 1

  • 放 * 所以它会显示最小值的所有记录
于 2016-10-03T12:41:00.290 回答