【问题标题】:How to select data where a field has a min value in MySQL?如何在 MySQL 中选择字段具有最小值的数据?
【发布时间】:2012-11-01 16:04:02
【问题描述】:

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

SELECT * FROM pieces WHERE MIN(price)

请帮忙?

【问题讨论】:

  • 这个问题可以有多种解释,你能给出带有结果的示例记录吗?

标签: mysql sql aggregate-functions greatest-n-per-group


【解决方案1】:

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

SELECT *
FROM pieces
WHERE price =  ( SELECT MIN(price) FROM pieces )

【讨论】:

    【解决方案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 所以你只会得到一个值。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 2018-06-12
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 2016-01-21
        • 2017-12-17
        相关资源
        最近更新 更多