与第一和第二高薪相关的Sql查询
有人能告诉我这个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(*
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中所有保留关键字的列表: