sql表中第二高的薪水

时间:2011-09-27 16:13:49

标签: sql-server-2008

sql表中第二高的薪水

select * from emp e where
 2 =(select count(distinct sal) from emp where e.sal<=sal)

我无法理解这个问题......任何人都可以帮助我。

3 个答案:

答案 0 :(得分:1)

让我们分析内部查询:您选择的所有不同工资大于或等于预定义工资,即外部查询的工资。

所以,对于每一行,你正在搜索并计算薪水大于或等于那一行的所有其他行,你最后选择一个值为2的行,这正是第二高的薪水(因为第二高的工资只有2个工资大于或等于自己:更高的工资和本身的工资。

非常不尽如人意,因为每一行都会重新扫描整个表格,但很有趣:)

答案 1 :(得分:0)

这是一种非常低效的方式。

它使用相关的子查询。从概念上讲,对于外部查询中的每一行,它会自行连接回emp表,并计算小于或等于当前工资的不同工资值的数量。如果这是2那么这个薪水是表中第二高的薪水。

这称为“三角形连接”,随着行数的增加,所需的工作量呈指数增长。

答案 2 :(得分:0)

我们可以从表中获得第n个最高薪水,见下面的sql:

SELECT DISTINCT salary, name, id 
       FROM emp_salary 
       GROUP BY salary 
       ORDER BY salary DESC 
       LIMIT N-1,1;

例如:找到第二高薪

SELECT DISTINCT salary, name, id 
       FROM emp_salary 
       GROUP BY salary 
       ORDER BY salary DESC 
       LIMIT 1,1;

我们可以从表中获得第n个最低薪水,见下面的sql:

SELECT DISTINCT salary, name, id 
       FROM emp_salary 
       GROUP BY salary 
       ORDER BY salary ASC 
       LIMIT N-1,1;

例如:找到第二低薪

SELECT DISTINCT salary, name, id 
       FROM emp_salary 
       GROUP BY salary 
       ORDER BY salary ASC 
       LIMIT 1,1;