我们希望拥有第二大元素。我们首先使用ANY来排除最大的一个。然后我们用all来选择最大的。但是,当我们运行此查询时,它会显示最大而不是第二个查询。为什么呢?
SELECT *
FROM bestelling
WHERE totaalprijs > ALL
(
SELECT totaalprijs
FROM bestelling
WHERE totaalprijs < ANY
(
SELECT totaalprijs
FROM bestelling
)
)
表中的元素:
157.00
5.00
82.80
15.00
20.00
20.00
答案 0 :(得分:5)
怎么样
select *
from bestselling
where totaalprijs < (select max(totaalprijs) from bestselling)
order by totaalprijs desc
limit 1;
答案 1 :(得分:5)
问题是“&gt;”在你最外面的查询中。如果你用语言打破这个,从内到外,你说:
如果您只想要第二大值,可以用MAX语句替换该外部子句:
SELECT max(totaalprijs)
FROM
(
SELECT totaalprijs
FROM bestelling
WHERE totaalprijs < ANY
(
SELECT totaalprijs
FROM bestelling
)
) M
或者,如果您想要所有带有“第二大”值的记录,您可以使用:
SELECT * FROM bestelling
WHERE totaalprijs =
(
SELECT max(totaalprijs)
FROM bestelling
WHERE totaalprijs < ANY
(
SELECT totaalprijs
FROM bestelling
)
)
答案 2 :(得分:1)
如果您使用的是MSSQL,这也是一个很好的解决方案,您可以更明显地选择符合条件的第一条记录。
select Top 1
from bestselling
where totaalprijs < (select max (totaalprijs) from bestselling)
order by totaalprijs desc
使用
select *
from bestselling
where totaalprijs < (select max (totaalprijs) from bestselling)
order by totaalprijs desc
limit 1;
适用于mySQL。
答案 3 :(得分:1)
最内层查询:列出所有值
中间查询:列出所有值,其中每个值至少存在一个大于它的值
外部查询:列出这些值大于中间查询中任何值的所有值
因此,中间查询获取除最大值之外的所有内容,并且外部查询列出除了最大值之外的所有内容 - 这将是最大值。
以下调整后的查询应该这样做,但如果有两行或多行都包含第二大值,则必须考虑如何处理。
SELECT *
FROM bestelling
WHERE totaalprijs =
(
SELECT max(totaalprijs)
FROM bestelling
WHERE totaalprijs < ANY
(
SELECT totaalprijs
FROM bestelling
)
)
答案 4 :(得分:0)
好的,那么对于Oracle如何:
select *
from bestselling
where totaalprijs < (select max(totaalprijs) from bestselling)
and rownum < 2
order by totaalprijs desc;
答案 5 :(得分:0)
此解决方案仅使用ALL和ANY来获得结果。
这部分排除了最大值。
SELECT totaalprijs
FROM bestelling
WHERE totaalprijs < ANY
(
SELECT totaalprijs
FROM bestelling
)
所以,现在我们有一个结果集,其中最大值实际上是第二大。现在,我们必须从结果集中排除所有较小的元素。因此,我们必须从第一个结果集中选择,而不是从bestelling中选择。
SELECT *
FROM
(
SELECT totaalprijs
FROM bestelling
WHERE totaalprijs < ANY
(
SELECT totaalprijs
FROM bestelling
)
)
WHERE totaalprijs >= ALL
(
SELECT totaalprijs
FROM bestelling
WHERE totaalprijs < ANY
(
SELECT totaalprijs
FROM bestelling
)
)