我想从 MySQL 中特定字段具有最小值的表中选择数据,我试过这个:
SELECT * FROM pieces WHERE MIN(price)
请问有什么帮助吗?
我想从 MySQL 中特定字段具有最小值的表中选择数据,我试过这个:
SELECT * FROM pieces WHERE MIN(price)
请问有什么帮助吗?
这将为您提供所有记录中价格最低的结果。
SELECT *
FROM pieces
WHERE price = ( SELECT MIN(price) FROM pieces )
假设我理解这个问题,我会这样做。
SELECT * FROM pieces ORDER BY price ASC LIMIT 1
如果您尝试选择多行,其中每行可能具有相同的最低价格,那么@JohnWoo 的回答就足够了。
基本上在这里,我们只是按价格升序 (ASC) 对结果进行排序,并获取结果的第一行。
这也有效:
SELECT
pieces.*
FROM
pieces inner join (select min(price) as minprice from pieces) mn
on pieces.price = mn.minprice
(由于此版本没有子查询的 where 条件,如果您需要 UPDATE 表可以使用它,但如果您只需要 SELECT 我建议使用 John Woo 解决方案)
使用HAVING MIN(...)
就像是:
SELECT MIN(price) AS price, pricegroup
FROM articles_prices
WHERE articleID=10
GROUP BY pricegroup
HAVING MIN(price) > 0;
有效的方式(任意数量的记录):
SELECT id, name, MIN(price) FROM (select * from table order by price) as t group by id
事实上,取决于你想得到什么: - 只是最小值:
SELECT MIN(price) FROM pieces
具有最小值的表(多行):正如 John Woo 上面所说的那样。
但是,如果可以是具有相同最小值的不同行,最好是从另一列中对它们进行排序,因为之后或之后您将需要这样做(从 John Woo answere 开始):
SELECT * FROM pieces WHERE price = ( SELECT MIN(price) FROM pieces) ORDER BY stock ASC
为了改进@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;
为了让它更简单
SELECT *,MIN(price) FROM prod LIMIT 1