如何在 MySQL 中选择字段具有最小值的数据?
Posted
技术标签:
【中文标题】如何在 MySQL 中选择字段具有最小值的数据?【英文标题】:How to select data where a field has a min value in MySQL? 【发布时间】:2012-11-01 16:04:02 【问题描述】:我想从 mysql 中特定字段具有最小值的表中选择数据,我试过这个:
SELECT * FROM pieces WHERE MIN(price)
请帮忙?
【问题讨论】:
这个问题可以有多种解释,你能给出带有结果的示例记录吗? 【参考方案1】:这将为您提供所有记录中价格最低的结果。
SELECT *
FROM pieces
WHERE price = ( SELECT MIN(price) FROM pieces )
SQLFiddle Demo
【讨论】:
【参考方案2】:假设我理解了这个问题,我会这样做。
SELECT * FROM pieces ORDER BY price ASC LIMIT 1
如果您尝试选择多行,其中每行可能具有相同的最低价格,那么@JohnWoo 的回答就足够了。
基本上,我们只是按价格升序 (ASC) 对结果进行排序,然后取结果的第一行。
【讨论】:
请告诉我,它会比子查询更快吗? @YamashiroRion 当然是的,因为它是简单且基本的查询【参考方案3】:这也有效:
SELECT
pieces.*
FROM
pieces inner join (select min(price) as minprice from pieces) mn
on pieces.price = mn.minprice
(由于此版本没有子查询的 where 条件,如果您需要 UPDATE 表可以使用它,但如果您只需要 SELECT 我建议使用 John Woo 解决方案)
【讨论】:
看起来可以在视图中重复使用?【参考方案4】:使用 HAVING MIN(...)
类似:
SELECT MIN(price) AS price, pricegroup
FROM articles_prices
WHERE articleID=10
GROUP BY pricegroup
HAVING MIN(price) > 0;
【讨论】:
【参考方案5】:高效方式(任意数量的记录):
SELECT id, name, MIN(price) FROM (select * from table order by price) as t group by id
【讨论】:
我已经尝试了很多解决方案:使用连接,使用子查询它们都很好,但会消耗更多时间。但这个太棒了。【参考方案6】:其实,要看你想得到什么: - 只是最小值:
SELECT MIN(price) FROM pieces
具有最小值的表(多行):正如 John Woo 上面所说的那样。
但是,如果可以是具有相同最小值的不同行,最好是从另一列中对它们进行排序,因为之后或之后您将需要这样做(从 John Woo 开始回答):
SELECT * FROM 件 WHERE 价格 = ( SELECT MIN(price) FROM pieces) 按库存 ASC 订购
【讨论】:
【参考方案7】:为了更简单
放*,这样会显示最小值的所有记录SELECT *,MIN(price) FROM prod LIMIT 1
【讨论】:
实际上不会。 * 将显示随机值,不一定来自与该最小值关联的行。 完全同意 Laurentiu L. 的观点:大多数其他 DBMS(然后是 MySQL)不允许您在没有适当的GROUP BY
子句的情况下运行这样的查询。
这将选择一个随机行来设置最小值,而不是询问的内容!
在加上你看到“放 * 所以它显示所有记录”但你添加了 LIMIT 1 所以你只会得到一个值。以上是关于如何在 MySQL 中选择字段具有最小值的数据?的主要内容,如果未能解决你的问题,请参考以下文章