【发布时间】:2011-01-10 17:49:04
【问题描述】:
如何从 Employee 表中的所有员工中查询第二高的薪水?
【问题讨论】:
标签: sql mysql sql-server-2005
如何从 Employee 表中的所有员工中查询第二高的薪水?
【问题讨论】:
标签: sql mysql sql-server-2005
试试这个:
SELECT max(salary)
FROM emptable
WHERE salary < (SELECT max(salary)
FROM emptable);
【讨论】:
简单回答:
SELECT distinct(sal)
FROM emp
ORDER BY sal DESC
LIMIT 1, 1;
你只会得到第二个最高薪水。
如果您需要任何第 3 或第 4 或第 N 个值,您可以增加第一个值,然后是 LIMIT (n-1) 即。第四薪:LIMIT 3, 1;
【讨论】:
大多数其他答案似乎都是特定于数据库的。
一般的SQL查询应该如下:
select
sal
from
emp a
where
N = (
select
count(distinct sal)
from
emp b
where
a.sal <= b.sal
)
where
N = any value
而且这个查询应该能够在任何数据库上工作。
【讨论】:
尝试类似:
SELECT TOP 1 compensation FROM (
SELECT TOP 2 compensation FROM employees
ORDER BY compensation DESC
) AS em ORDER BY compensation ASC
基本上:
如果工资不明确,您可以使用SELECT DISTINCT TOP ... 代替。
【讨论】:
SELECT DISTINCT TOP...。
也许你应该使用DENSE_RANK。
SELECT *
FROM (
SELECT
[Salary],
(DENSE_RANK()
OVER
(
ORDER BY [Salary] DESC)) AS rnk
FROM [Table1]
GROUP BY [Num]
) AS A
WHERE A.rnk = 2
【讨论】:
ROW_NUMBER() 代替(RANK() 在这种情况下不会返回 2,DENSE_RANK() 会,但它实际上是第三高的薪水)。
要从员工那里找到第二个最高工资,
SELECT MAX(salary) FROM employee
WHERE salary NOT IN (
SELECT MAX (salary) FROM employee
)
要查找员工的第一和第二个最高工资,
SELECT salary FROM (
SELECT DISTINCT(salary) FROM employee ORDER BY salary DESC
) WHERE rownum<=2
这个查询工作正常,因为我用过
【讨论】:
select max(Emp_Sal)
from Employee a
where 1 = ( select count(*)
from Employee b
where b.Emp_Sal > a.Emp_Sal)
是的跑男。
【讨论】:
//选择薪水第二高的员工姓名
SELECT name
FROM employee WHERE salary =
(SELECT MIN(salary) FROM
(SELECT TOP (2) salary
FROM employee
ORDER BY salary DESC) )
【讨论】:
select distinct(t1.sal)
from emp t1
where &n=(select count(distinct(t2.sal)) from emp t2 where t1.sal<=t2.sal);
输出: 输入 n 的值:如果要第二高,请输入 2;如果要 5,请输入 n=3
【讨论】:
试试这个:
SELECT
salary,
employeeid
FROM
employees
ORDER BY
salary DESC
LIMIT 2
那么就获取第二行。
【讨论】:
select * from compensation where Salary = (
select top 1 Salary from (
select top 2 Salary from compensation
group by Salary order by Salary desc) top2
order by Salary)
这将为您提供所有行第二高薪水,少数人可能会分享
【讨论】:
select max(Salary) from Employee
where Salary
not in (Select Max(Salary) from Employee)
【讨论】:
select max(Salary) from Employee
where Salary
not in (Select top4 salary from Employee);
因为答案如下
最大(5,6,7,8)
所以将显示第 5 高的记录,前四个将不被考虑
【讨论】:
select max(sal) from emp
where sal not in (select max(sal) from emp )
或
select max(salary) from emp table
where sal<(select max(salary)from emp)
【讨论】:
试试这个:
select max(Emp_Sal)
from Employee a
where 1 = ( select count(*)
from Employee b
where b.Emp_Sal > a.Emp_Sal)
【讨论】:
select * from emp
where sal=(select min(sal) from
(select sal from(select distinct sal from emp order by sal desc)
where rownum<=n));
n可以是你想看到的值......
你可以看到薪水第 n 高的那个人的所有字段*强文本*
【讨论】:
SELECT
TOP 1 salary
FROM
(
SELECT
TOP 2 salary
FROM
employees
) sal
ORDER BY
salary DESC;
【讨论】: