尝试sql理论:在mysql中迭代查找第n个max进行排序(您的按函数排序的顺序被破坏)

尝试sql理论:在mysql中迭代查找第n个max进行排序(您的按函数排序的顺序被破坏),mysql,sql,theory,Mysql,Sql,Theory,我来自一个更具强制性的编码背景,所以一些声明性实现还不是很自然。我的问题是在一个假设的场景中,您没有按顺序按函数访问的权限,但是有一组值,并且单调地增加1行数,并且想要一个排序的返回 从概念上讲,它看起来像是一个交叉连接,有一个掩码或一个相关的子查询应该可以工作,但我还没有能够将它清除出来并寻找一些指导 从概念上讲,在相关子查询中对第n个高值进行迭代应该是可行的,但我不确定如何让它为每一行运行 select a.name, a.value from table a where a.row_nu

我来自一个更具强制性的编码背景,所以一些声明性实现还不是很自然。我的问题是在一个假设的场景中,您没有按顺序按函数访问的权限,但是有一组值,并且单调地增加1行数,并且想要一个排序的返回

从概念上讲,它看起来像是一个交叉连接,有一个掩码或一个相关的子查询应该可以工作,但我还没有能够将它清除出来并寻找一些指导

从概念上讲,在相关子查询中对第n个高值进行迭代应该是可行的,但我不确定如何让它为每一行运行

select a.name, a.value
from table a 
where a.row_number = select(count(*) 
                         from table b 
                         where b.value < a.value)
我的另一个想法是使用交叉连接,但看起来相关子查询更有意义,任何想法或到资源的链接都很好。谢谢

样本数据

|id |值|

|1 | 12|

|2 | 4|

|3 | 13|

|4 | 9|

输出

|价值观|

四,

九,

十二,


13如果我理解正确,这是你的问题:

您没有按顺序按函数访问的权限,但有一组值 然后单调地增加1行数,然后想要一个排序的 返回

关于SQL,您缺少了一个非常重要的要点:表表示无序集。除非使用ORDER BY明确指定排序,否则结果集是无序的


子查询-相关或其他-不会以任何一致和可靠的方式影响排序。如果要排序返回,必须使用ORDER BY。

为什么不使用LIMIT子句呢?可以使用带有联接的子查询进行迭代。但是,如果希望获得排序返回,则需要在子查询中使用ORDERBY。如果你不能使用ORDER BY,我认为如果你必须使用纯SQL,那你就不走运了。我不能100%确定我是否理解你想要做什么。这就是为什么样本数据和期望的结果非常有用的原因。添加样本数据谢谢@GordonLinoff@GeorgeGreen您可以在cs.stackexchange.com上问这个问题。基本问题是:如果不使用order BY,如何对纯SQL查询的结果进行排序?是的,但是,不要粗鲁,当我特别试图理解mysql中如何执行操作时,说use order BY并没有特别大的帮助。如果没有行号,这显然没有任何意义,但是我的目标是尝试使用这条额外的信息来获得我想要的执行。@GeorgeGreen是的,但这就像在哈希表中请求第n项一样。这就是为什么这是一个奇怪的问题。这是一个不确定的结果,SQL是关于确定性的。如果基于任意行编号,则可以对相同的表执行相同的查询,而无需按顺序执行,就可以得到不同的结果,这仍然是正确的。SQL是关于编写不这样做的查询。