有人可以解释这个SQL查询吗?

时间:2015-01-17 17:59:53

标签: sql

我刚开始使用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 有人可以解释一下吗? 。感谢

1 个答案:

答案 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;