sql表中第二高的薪水
select * from emp e where
2 =(select count(distinct sal) from emp where e.sal<=sal)
我无法理解这个问题......任何人都可以帮助我。
答案 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;