Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 你能让我理解这个查询是如何工作的吗?_Sql_Oracle11g - Fatal编程技术网

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

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名员工的工资比他高,但其他所有人

这个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名员工的工资比他高,但其他所有人的工资都在2或更少

注意:您的查询严格来说不会返回工资最高的三名员工,因为它不考虑重复工资。如果您希望查询找到前3名的员工,即使是在有领带的情况下,您也可以尝试以下方法:

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

您应该真正添加示例数据,除非您使用的是Oracle的示例表,即使在这种情况下,您也可能希望将其缩小一点。这可能不是获得该答案的最有效查询。