Sql 你能让我理解这个查询是如何工作的吗?
这个where子句如何工作Sql 你能让我理解这个查询是如何工作的吗?,sql,oracle11g,Sql,Oracle11g,这个where子句如何工作 SELECT ENAME,SAL FROM EMP E WHERE 3 > ( SELECT COUNT(*) FROM EMP WHERE SAL > E.SAL ); 此查询将返回工资较高的其他员工严格少于3名的所有员工 例如,如果您有以下一组员工和工资: Fred $100 Bill $80 John $60 Jack $50 然后,您的查询将返回除Jack之外的所有人,因为Jack有3名员工的工资比他高,但其他所有人
SELECT ENAME,SAL
FROM EMP E
WHERE 3 > (
SELECT COUNT(*)
FROM EMP
WHERE SAL > E.SAL
);
此查询将返回工资较高的其他员工严格少于3名的所有员工 例如,如果您有以下一组员工和工资:
Fred $100
Bill $80
John $60
Jack $50
然后,您的查询将返回除Jack之外的所有人,因为Jack有3名员工的工资比他高,但其他所有人的工资都在2或更少
注意:您的查询严格来说不会返回工资最高的三名员工,因为它不考虑重复工资。如果您希望查询找到前3名的员工,即使是在有领带的情况下,您也可以尝试以下方法:
SELECT ENAME,SAL
FROM EMP E
WHERE (
SELECT COUNT(DISTINCT SAL)
FROM EMP
WHERE SAL > E.SAL
) < 3
您应该真正添加示例数据,除非您使用的是Oracle的示例表,即使在这种情况下,您也可能希望将其缩小一点。这可能不是获得该答案的最有效查询。