限制SQL查询的结果

时间:2014-12-29 13:23:08

标签: sql postgresql select subquery correlated-subquery

我正在采用限制SQL结果的方法,我遇到过这样的方式:

SELECT name
FROM employees e
WHERE 2>=( SELECT COUNT(*) FROM employees e1 WHERE e1.birthdate>e.birthdate);

此查询返回三个最年轻的员工,但我不太了解此查询的工作原理。为什么它是2> =而不是2< =?任何人都可以了解这个查询的作用吗?谢谢!

2 个答案:

答案 0 :(得分:1)

SELECT COUNT(*) FROM employees e1 WHERE e1.birthdate>e.birthdate

为您提供比当前员工年轻的员工人数。 因此,只要0,1或2人比当前员工更年轻,就会返回。

这最终为您提供了三名最年轻的员工。 事实上,它只给你的员工提供3个最年轻的出生日期(可能超过3名员工)

答案 1 :(得分:1)

用示例数据理解它:

employeeId birthdate
1          12/29/2014
2          11/20/2014
3          01/01/2015
4          11/19/1991

现在,评估每个子查询:

employeeId birthdate   subquery result
1          12/29/2014  how many employees have birth date > 12/29/2014 = 1
2          11/20/2014  how many employees have birth date > 11/20/2014 = 2
3          01/01/2015  how many employees have birth date > 01/01/2015 = 0
4          11/19/1991  how many employees have birth date > 11/19/1991 = 3

现在,应用标准2>= subquery result。可以肯定的是,它将返回emp 1,2,3而不是4。

注意:仅仅是为了获得有效实现此目的的其他方法的信息。