【问题标题】:SQLite: select MIN from limited row setSQLite:从有限的行集中选择 MIN
【发布时间】:2012-07-06 20:18:04
【问题描述】:

我需要从表中的前 5 行中选择最小 ID 值。我通过此查询获得了最高 ID:

SELECT id FROM items ORDER BY id DESC LIMIT 5

它工作正常并从前 5 行返回 ID 值:

314
313
312
311
310

现在,尝试从该集合中获取最小 ID:

SELECT MIN(id) FROM items ORDER BY id DESC LIMIT 5

我希望结果是 310 但 SQLite 返回 1。 那是怎么回事?我哪里错了,我应该实现我的目标吗?

更新:

SELECT MIN(id) FROM (SELECT id FROM news_items ORDER BY id DESC LIMIT 5) 有效,所以现在我只是好奇第一个查询出了什么问题。

【问题讨论】:

  • 那么,你真的在​​使用MAX吗?应该是MIN吗?为了回答您的问题,您桌子上的id 的最小值是多少?
  • @Lamak:抱歉,我的代码中到处都在使用MIN,这只是问题搞砸了(现已修复)。我桌子上的最小 id 确实是 1
  • 你的最小值是1?,而你第一次查询的结果是0?,那我的回答不正确

标签: sql sqlite


【解决方案1】:

假设你实际使用的是MIN而不是MAX,那么解释就很简单了。 ORDER BY id DESC LIMIT 5 是对您的查询进行评估的最后一部分。因此,在您的第一个查询中,您正在检索 id 的最小值(它应该是 0),然后 ORDER BY .... 是无关紧要的(您正在订购和限制一行)

【讨论】:

  • 好的,我想这只是我对 SQL 工作原理的理解上的一个漏洞,谢谢
【解决方案2】:

ORDER BY 需要评估整个数据集才能正确排序。

通过经验证据,我们可以假设MIN 在每一行都被评估。 :)

【讨论】:

  • 即使列被索引也是如此吗?
猜你喜欢
  • 2013-07-19
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 2016-03-07
相关资源
最近更新 更多