谁能告诉我这个sql查询是如何计算的:
SELECT e.sal
FROM employees e
WHERE 1 >= (
SELECT count(*)
FROM employess s
WHERE s.sal>e.sal
)我知道这个查询返回的是第一和第二高工资。但我想了解这个查询的工作原理。我想知道它是如何获得第一和第二高工资的。请详细解释。
发布于 2013-01-30 01:55:37
子选择
(SELECT count(*) FROM employess s WHERE s.sal>e.sal)返回薪资大于您在顶层select中查看的当前员工的员工数。
因此,该查询基本上是给我所有其他员工收入不超过1人的员工
非常直截了当,尽管效率非常低。更简单的方法是:
select top 2 * from employees order by sal descEDIT:这将返回工资最高的前两名员工,正如戈登所指出的那样,这与前两名截然不同的工资值不同,因为人们的工资可能完全相同。如果这是一个问题,那么您必须首先像这样删除重复数据:
select top 2 sal from employees group by sal order by sal desc发布于 2013-01-30 01:51:31
为了获得你的第一和第二高薪水,我会使用ROW_NUMBER()。这应该会让人们很容易理解工资的排名。或者,如果您需要考虑关系,可以考虑使用RANK()。
像这样的东西应该是有效的:
SELECT sal, Row
FROM (
SELECT sal, ROW_NUMBER() OVER(ORDER BY sal DESC) AS Row
FROM employees e ) t
WHERE Row IN (1,2);这是SQL Fiddle。
祝好运。
发布于 2013-01-30 01:49:24
编辑:我错过了e和s。所以我的答案是错误的。
该查询应该返回所有内容。
(SELECT count(*) FROM employess s WHERE s.sal>e.sal)由于e.sal永远不会> e.sal (1永远不会> 1),因此计数(*)将始终为0。而SELECT e.sal FROM employees e WHERE 1 >= (0)将永远是一切
如果你想返回前两名的薪水,你可能会尝试这样做:
SELECT TOP 2 * FROM employess AS e ORDER BY e.sal DESChttps://stackoverflow.com/questions/14589009
复制相似问题