我刚开始使用SQL,我发现了这个查询而我无法理解它。
SQL>
select e.*
from employees e
where (select count(*)
from employees x
where x.bdate > e.bdate) = 3;
x.bdate > e.bdate
总是正确的吗? O_O
有人可以解释一下吗? 。感谢
答案 0 :(得分:2)
如果我们假设employees.bdate
是唯一的,那么它将获得第四大bdate
值。如果它们不是唯一的,那么它可能会得到第一个,第二个,第三个或没有值。
想象一下,你有这样的数据:
bdate
1
2
3
4
5
子查询正在计算bdate更大的行数:
bdate calc
1 4
2 3
3 2
4 1
5 0
在这种情况下,它将返回" 2"。 SQL的大多数方言都有RANK()
函数,它的功能非常相似。此外,由于可能存在重复的bdate
值,因此查询可能不会执行作者真正想要的操作。那会更像是:
select e.*
from employees e
order by bdate desc
fetch first 1 row only offet 3;