从表中找到第二高的记录

时间:2016-04-17 04:55:37

标签: sql oracle11g

我想从员工表中找到薪水和员工姓名。这个员工表有像emp_id,emp_name,emp_salary这样的列。要明确:

 emplyee
   --------------
   | emp_id|emp_name|emp_salary|
   -----------------------------
   | 100   |John    | 2500     |
   | 200   |Nash    | 1500     |
   | 300   |Koffe   | 100      |
   | 400   |Anan    | 6000     |
   | 500   |Moon    | 2600     |
   -----------------------------  

从上表中,第二高的薪水是2600.我怎么能找到这个?

2 个答案:

答案 0 :(得分:0)

您可以尝试:

SELECT max(薪水) 从emptable 薪水< (SELECT max(工资)                 FROM emptable);

答案 1 :(得分:0)

我们可以在相关子查询中实现这一点

从员工e1中选择e1.emp_ename,e1.emp_salary 其中2 =(从员工e2中选择计数(不同的e2.emp_salary),其中e2.salary> = e2.salary);

看看它是如何工作的

从员工中选择* emp_id emp_ename emp_salary 1 naresh 100 2苏雷什150 3 mahesh 200 4赛250  在上表中第二高的薪水是200 相关子查询意味着首先执行第一个父查询,然后执行子查询

了解此查询的工作方式

从员工e1中选择e1.emp_ename,e1.emp_salary 其中2 =(从员工e2中选择计数(不同的e2.emp_salary),其中e2.salary> = e2.salary);

第1步:第一行sal转到子查询where子句

从员工e1中选择e1.emp_ename,e1.emp_salary 其中2 =(从员工e2中选择计数(不同的e2.emp_salary),其中e2.salary> = 100) 所以计算行数大于100(即= 4) 所以条件错误 从员工e1中选择e1.emp_ename,e1.emp_salary 其中2 = 4(假)

第二步

从员工e1中选择e1.emp_ename,e1.emp_salary 其中2 =(从员工e2中选择计数(不同的e2.emp_salary),其中e2.salary> = 150);

从员工e1中选择e1.emp_ename,e1.emp_salary 其中2 = 3(FALSE)

3r步

从员工e1中选择e1.emp_ename,e1.emp_salary 其中2 =(从员工e2中选择计数(不同的e2.emp_salary),其中e2.salary> = 200);

从员工e1中选择e1.emp_ename,e1.emp_salary 其中2 = 2(TRUE)

SO FINAL WE GOT 200  我希望你能充分利用你的一切