Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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_Sql Server - Fatal编程技术网

与第一和第二高薪相关的Sql查询

与第一和第二高薪相关的Sql查询,sql,sql-server,Sql,Sql Server,有人能告诉我这个sql查询是如何计算的吗 SELECT e.sal FROM employees e WHERE 1 >= ( SELECT count(*) FROM employess s WHERE s.sal>e.sal ) 我知道这个查询返回的是第一和第二高工资。但我想了解这个查询的工作原理。我想知道它是如何回报第一和第二高工资的。请详细解释。编辑:我错过了e和s。所以我的答案是错误的。 该查询将返回所有内容 (SELECT count(*

有人能告诉我这个sql查询是如何计算的吗

SELECT e.sal 
FROM employees e 
WHERE 1 >= (
    SELECT count(*) 
    FROM employess s 
    WHERE s.sal>e.sal
)
我知道这个查询返回的是第一和第二高工资。但我想了解这个查询的工作原理。我想知道它是如何回报第一和第二高工资的。请详细解释。

编辑:我错过了e和s。所以我的答案是错误的。 该查询将返回所有内容

(SELECT count(*) FROM employess s WHERE s.sal>e.sal)
由于e.sal永远不会>e.sal 1永远不会>1,因此,计数*将始终为0。 并从employees e中选择e.sal,其中1>=0将始终是一切

如果您想退回前2名的薪资,您可能希望尝试以下方法:

SELECT TOP 2 * FROM employess AS e ORDER BY e.sal DESC

为了得到你第一和第二高的薪水,我会使用排号。这将使人们更容易理解工资的排名。或者,如果你需要考虑关系,可以考虑使用排名

像这样的方法应该会奏效:

SELECT sal, Row 
FROM (
   SELECT sal, ROW_NUMBER() OVER(ORDER BY sal DESC) AS Row
   FROM employees e ) t
WHERE Row IN (1,2);
这是我的答案

祝你好运。

子选项

 (SELECT count(*) FROM employess s WHERE s.sal>e.sal)
返回薪资高于您在顶层选择中查看的当前员工的员工数

所以这个问题基本上是说给我所有的员工,让他们有一个或更少的其他员工比他们赚更多

非常直截了当,但效率极低。更简单的方法是:

select top 2 * from employees order by sal desc
编辑:这将返回薪酬最高的前2名员工,正如Gordon指出的,这与前2名不同的薪酬值不同,因为人们的薪酬可能完全相同。 如果这是一个问题,您必须先像这样重复数据消除它:

select top 2 sal from employees group by sal order by sal desc

因为e.sal永远不会是>的,所以可能是重复的?为什么?同意-+1解释问题所在。此答案和问题忽略了多个员工的工资最高的情况。在这种情况下,可以返回两行以上的数据,并且查询的版本与top不同。@GordonLinoff更新了我的答案以解决重复的薪资值需要注意的方法。.SQL Server在1,2筛选器中使用WHERE行似乎比仅使用SELECT TOP2Good注释产生更昂贵的计划,但在这种情况下,我们很安全。以下是SQL Server中所有保留关键字的列表: