找到第二高的逻辑解释

时间:2014-05-28 18:56:30

标签: sql database

我需要使用下面的查询找到第二个最高值列的位说明

SELECT MAX( column )
  FROM table
 WHERE column < ( SELECT MAX( column )
                 FROM table )

假设我的table single column名为'column',其值为10,20,30,40.

现在我的上述查询输出30,无论如何都是第二高。

根据我的理解,这是如何运作的。

内部查询找到MAX( column ),并且在我的情况下始终为40

现在,对于使用WHERE的每列,我们正在检查其是否小于max值。

但我们如何存储该结果以使用MAX(column)找到outer query

意味着在我的情况下我们应该有一个list of values lesser than actual max value ie 40

该列表为10,20,30

我们再次从此列表中找到max 30

 so here how and where it stores all the columns lesser than actual max value

(40 in this case) which is used at the end to find 

 max again using that list(10,20,30).

任何人都可以解释一下这是如何运作的吗?

5 个答案:

答案 0 :(得分:1)

这是逻辑评估查询的方式。

T(c)=&gt; {10,20,30,40}

MAX(c)=&gt; 40

SELECT c FROM T WHERE c&lt; 40 =&gt; {10,20,30}

SELECT MAX(c)FROM T WHERE c&lt; 40 =&gt; 30

答案 1 :(得分:0)

这里有两个问题:
SELECT MAX( column ) FROM table
这将找到列中最大的行并返回它。

SELECT MAX( column ) FROM table WHERE column <...
这会在列中找到小于某个条件的最大行

他们的力量结​​合......

SELECT MAX( column ) FROM table WHERE column < (SELECT MAX( column ) FROM table)
这会找到列中最大的行,该行小于列中的最大行(也称为第二大行)。

答案 2 :(得分:0)

我看到你了解这个问题,不是吗?:

SELECT MAX( column )
FROM table

它只返回存储在此表中的最大值。所以在你的例子中是40

所以现在考虑这个简化问题的查询:

SELECT MAX( column )
FROM table
WHERE column < 40

我也没有看到任何问题让你理解这一点。它仍然是与上面相同的查询,但仅考虑column值小于40的行。它是如何存储在数据库中的(如临时表等)是DBMS的问题,你不需要为此烦恼。

请说明您不理解的内容,并希望我们澄清。

答案 3 :(得分:0)

内部查询从表中选择最高值。 RDBMS足够聪明,可以将这个值保存在内存中,然后再次点击表格查找表格中的最高值,除非这次它正在寻找小于原始最高值的最高值。

没有比这更多的了。我没有编写RDBMS,所以我不知道它是如何运作的。

答案 4 :(得分:-1)

SELECT列FROM表ORDER BY列DESC LIMIT 2;

这将提供前两个,因此您需要从那里解析数据。