你能让我理解这个查询是如何工作的吗?

时间:2017-01-03 06:22:34

标签: sql oracle11g

这个where子句如何工作?

SELECT ENAME,SAL 
FROM EMP E
WHERE 3 > (
    SELECT COUNT(*) 
    FROM EMP
    WHERE SAL > E.SAL
);

1 个答案:

答案 0 :(得分:0)

此查询将返回所有员工,其中严重少于3名其他员工的薪水较高。

例如,如果您有以下一组员工和工资:

Fred $100
Bill $80
John $60
Jack $50

然后你的查询将返回以外的所有人杰克,因为杰克有3名员工的工资高于他,但其他人都有2人或更少。

注意:您的查询严格返回薪水最高的三名员工,因为它不会考虑重复的工资。如果您希望查询找到前3名中的员工,即使存在关联,您也可以尝试:

SELECT ENAME,SAL 
FROM EMP E
WHERE (
    SELECT COUNT(DISTINCT SAL) 
    FROM EMP
    WHERE SAL > E.SAL
) < 3