sql:尝试选择第二大元素但选择最大元素

mat*_*thy 1 sql

我们希望拥有第二大元素.我们首先使用ANY来排除最大的一个.然后我们用all来选择最大的.但是,当我们运行此查询时,它会显示最大而不是第二个查询.为什么?

SELECT * 
FROM bestelling
WHERE totaalprijs > ALL
(
    SELECT totaalprijs
    FROM bestelling
    WHERE totaalprijs < ANY
    (
        SELECT totaalprijs
        FROM bestelling

    )
)
Run Code Online (Sandbox Code Playgroud)

表中的元素:

157.00
5.00
82.80
15.00
20.00
20.00
Run Code Online (Sandbox Code Playgroud)

MJB*_*MJB 5

怎么样

select * 
from bestselling 
where totaalprijs < (select max(totaalprijs) from bestselling)
order by totaalprijs desc
limit 1;
Run Code Online (Sandbox Code Playgroud)


Ian*_*ley 5

问题是最外层查询中的">".如果你用语言打破这个,从内到外,你说:

  • 从表中的所有行...
  • 给我任何totaalprijs小于其他值的地方(即除了表中最大值的记录以外的所有记录,157.00)......
  • 然后,给我任何大于上一个表中所有记录的值.当然,这只是最大的一个.

如果您只想要第二大值,可以用MAX语句替换该外部子句:

SELECT max(totaalprijs)
FROM 
(
    SELECT totaalprijs
    FROM bestelling
    WHERE totaalprijs < ANY
    (
        SELECT totaalprijs
        FROM bestelling
    )
) M
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要所有带有"第二大"值的记录,您可以使用:

SELECT * FROM bestelling 
WHERE totaalprijs = 
(
    SELECT max(totaalprijs)
    FROM bestelling
    WHERE totaalprijs < ANY
    (
        SELECT totaalprijs
        FROM bestelling
    )
)
Run Code Online (Sandbox Code Playgroud)