【问题标题】:how to get the id of smallest number in mysql using the MIN() function如何使用 MIN() 函数获取 mysql 中最小数字的 id
【发布时间】:2011-11-24 01:03:27
【问题描述】:

样本表

id |   name   | price |
-----------------------
1  |   john   | 300   |
----------------------- 
2  | michael  |  400  |
----------------------- 
3  | michelle |  250  |
-----------------------

我将使用这个查询得到表中最小的数字

SELECT id, name, MIN(price) FROM table

结果会变成这样:

_______________________
id |   name   | price |
-----------------------
1  | michelle |  250  |

我希望结果会变成这样:

id |   name   | price |
-----------------------
3  | michelle |  250  |
-----------------------

提前致谢!

【问题讨论】:

  • 顺便说一句,您的样本数据集中的最低价格是 200,但您想要的输出使用的是 250 的价格。这是一个错误,还是我没有完全理解您想要什么?
  • 我会赞成这个问题,除非您的预期输出与您提出的问题不匹配。 (您要的是MIN 的价格,但显示的输出不是这个价格,这是没有意义的。)
  • 对不起,我写错了值 id 2 应该是 400。谢谢你的建议。

标签: mysql sql


【解决方案1】:

获取最小数字的id最简单的方法是这样的:

SELECT Id, name, price
FROM sampleTable
ORDER BY price ASC 
LIMIT 1;

如果您想使用 MIN(如标题所述),一种方法是:

SELECT id, name, price 
FROM sampleTable 
WHERE price = (SELECT MIN(price) from sampleTable)

【讨论】:

  • 感谢 M_M 提供此查询。我更喜欢使用第一个查询,因为我还需要获得最小的价格和 ID。
【解决方案2】:

使用子查询:

SELECT id, name, price 
FROM table 
WHERE price = (SELECT min(price) FROM table);

如果没有LIMIT 1,这可能会返回多个共享相同最低价格的行。这可能是也可能不是您想要的,而不是在匹配记录中任意选择。

【讨论】:

  • 它应该是PRICE = 而不是PRICE IN,因为您要匹配一行。
【解决方案3】:

对于这个查询,你不需要MIN,但可以使用ORDER BYLIMIT

SELECT id, name, price
FROM Table
ORDER BY Price ASC
LIMIT 1

【讨论】:

    【解决方案4】:

    我是这样做的:

    SELECT t1.id, t1.name, t1.price
    FROM sampleTable AS t1
    LEFT OUTER JOIN sampleTable AS t2
      ON t1.price > t2.price
    WHERE t2.id IS NULL
    

    换句话说,寻找价格低于行 t1 的行 t2。如果没有找到这样的行 t2,则外连接使 t2.* 为 NULL,如果为真,则 t1 必须具有最低价格。

    这称为排除连接,它通常比 MySQL 中的子查询执行得更好。

    【讨论】:

      【解决方案5】:

      这样做;

      SELECT id, name, price FROM table order by price ASC LIMIT 1

      希望对你有帮助

      【讨论】:

      • 谢谢 Sudhir 我会试试这个。
      【解决方案6】:

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

      SELECT id, name, MIN(price) FROM (select * from table order by price) as t group by id
      

      我尝试了很多解决方案: 使用joinsubquery 。它们都很好,但需要更多时间。

      但这个太棒了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-27
        • 2016-02-14
        • 2021-06-21
        • 1970-01-01
        • 2016-04-14
        • 2020-03-25
        • 2021-11-20
        • 2016-04-16
        相关资源
        最近更新 更多