如何在 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 中选择字段具有最小值的数据?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 选择 JSON 字段属性具有值的位置

按列分组并选择具有多个最小值的行中的所有字段

Django:如何选择具有相同字段值的对象?

如何使用 LINQ 选择具有最小或最大属性值的对象

用于在 varchar 字段中选择最小/最大值的 Mysql 查询

SQL查询以选择具有最小值的不同行