【问题标题】:How can I use MAX and LIMIT together in MySQL如何在 MySQL 中同时使用 MAX 和 LIMIT
【发布时间】:2010-11-12 03:37:34
【问题描述】:

我有一个结构如下的表:

ID |颜色

1 |红色
2 |蓝色
3 |黄色
8 |紫色
10|绿色
.
.
.
100|黄色

我希望能够获取前 5 行的 MAX ID 值。

例如,我想做这样的事情: 从表 LIMIT 5 中选择 MAX(ID)

希望这会返回值 10

但是,MySQL 一直返回 100...就像 MySQL 甚至没有看到 LIMIT 子句一样。

【问题讨论】:

    标签: mysql limit max


    【解决方案1】:

    如果你有一个具有以下结构的表

    ID | Color
    
    1 | red
    2 | blue
    3 | yellow
    8 | purple
    10| green
    .
    .
    .
    100|yellow
    

    前 5 个(AUTO_INCREMENT?)值的 MAX ID 值为 5。 顺便说一句,前 6 个值的 MAX ID 值为 6。所有值均为 100。 最好的问候。

    【讨论】:

      【解决方案2】:

      有比子选择更好的方法:

      SELECT id FROM table LIMIT 4,1
      

      获取一行但先跳过 4.. 如果这是 MyISAM 表,请添加“order by id”。

      【讨论】:

      • 如果您知道有多少行,这将有效。如果超过行数,则查询返回 NULL。我需要这个用于批处理目的,但最大版本更适合我的情况。
      • 不错!但如果有 4 条记录而不是 5 条记录,则不起作用
      【解决方案3】:

      听起来您想选择前 5 条记录(按 ID 排序),然后获取该组的最高值?如果是这样:

      SELECT
          MAX(ID)
      FROM
          ( 
               SELECT ID 
               FROM YourTable
               ORDER BY ID
               LIMIT 5
          ) as T1 
      

      【讨论】:

      • 你可能不需要 "select *" ;只有“选择ID”就足够了吗? (我不确定是否如此,但也许只选择您需要的字段可能会减少所需的内存量——这总是很好)
      • 是的,应该是SELECT ID
      • 但是当我们只需要最大值时,这会在内部创建一个新表。我想说这与使用LIMIT 选择已排序的行并在 SQL 之外计算最大值一样慢。
      【解决方案4】:

      使用子选择:

      SELECT MAX(id) FROM (SELECT id FROM table LIMIT 5);
      

      这可能不是完全有效的 SQL,但这应该可以让您大致了解一下。

      【讨论】:

      • 无效的 SQL。您需要在每个派生表上都有一个别名 + 您应该有一个排序依据,以便获得“定义”的结果。
      猜你喜欢
      • 2018-12-19
      • 2020-10-02
      • 1970-01-01
      • 2012-09-02
      • 2010-11-07
      • 2023-03-16
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      相关资源
      最近更新 更多