0

有人可以建议从包含三个“NOT NULL”字段、sal(salary)、name、empno(employee number) 的表“EMP”中选择第二高薪水的创新查询吗?

我有一个:

Select sal 
from EMP A 
where 1 = (select count(DISTINCT SAL) from EMP B whre A.sal < B.sal);

select DISTINCT sal 
from emp a 
where 1 = (select count(DISTINCT sal) from emp b where a.sal < b.sal);
4

8 回答 8

3
select empno, 
       name,
       salary
from (
   select empno, 
          name,
          salary, 
          dense_rank() over (order by salary desc) as rnk
   from employee
) t
where rnk = 2;
于 2013-01-28T13:27:18.253 回答
0

select top (1) sal from Emp where sal<(select max(sal) from emp) order by sal desc

在上面的查询中,首先我们按降序对所有薪水进行排序,以便在顶部获得最高薪水,然后我们选择低于该列中最高薪水的最高薪水。

于 2015-03-08T04:17:33.953 回答
0

查询以查找第二高的薪水。

SELECT * FROM EMP WHERE SAL IN(SELECT MAX(SAL) FROM EMP WHERE SAL NOT IN (SELECT MAX(SAL) FROM EMP));
于 2013-06-06T11:41:02.683 回答
0
SELECT * FROM EMP A
WHERE 2= (SELECT COUNT(*) FROM EMP B WHERE B.SAL >=A.SAL)

如果 2 名员工的薪水第二高,则不要使用 2,而是在 where 子句之后使用 3。

于 2015-03-08T03:35:26.113 回答
0

SOF 已经回答了这个问题,您必须决定它们是否足够创新以满足您的需求。

查找第二大值的最简单的 SQL 查询是什么?

如何从表中获取第二大或第三大条目

SELECT emp_salary,R 
  FROM (SELECT ROWNUM R,emp_salary 
          FROM (SELECT emp_salary 
                  FROM Employee 
                 ORDER BY emp_salary DESC
               )
        ) 
 WHERE R=2

这应该可以按您的意愿工作。您可以替换 R 的值以查找任何值。R=2 给出第二高,R=3 给出第三高。

你可以在这里试试小提琴http://sqlfiddle.com/#!4/a6f42/14

于 2013-01-28T09:22:17.443 回答
0

这是最有利的面试问题。您可以通过不同的方式解决这个问题 - 查询 1:

select MAX(Sal) from Employee WHERE Sal NOT IN (select MAX(Sal) from Employee );

查询 2:

WITH CTE AS (
SELECT  Ename, sal, 
ROW_NUMBER() OVER(ORDER BY sal DESC) as RN
FROM Employee
)
SELECT Ename, sal
FROM CTE
WHERE RN = 2

查询 3:如果你想得到第 N 高的薪水,你只需要提到 N(1/2/3/4/..N) 代替 2。

select A.Ename, A.sal from Employee A
where 2 = (select count(*) from Employee B where B.EmpNo >= A.EmpNo)

您可以在 [此处] 找到更多答案。 https://knowledgebase.techandmate.com/answers/55

谢谢,

于 2016-08-22T13:58:18.617 回答
0
SELECT MAX(esalary)
FROM emp 
WHERE esalary < 
(SELECT MAX(esalary)
FROM emp); 

SELECT MAX(esalary) 
FROM emp 
WHERE esalary NOT IN 
(SELECT MAX(esalary)
FROM emp);
于 2015-09-25T10:30:55.413 回答
-1
;WITH cte
AS (
    SELECT *,
        ROW_NUMBER() OVER (
            ORDER BY [salary] DESC
            ) AS rowid
    FROM [Employee].[DimEmployeeDetails]
    )
SELECT *
FROM cte
WHERE rowid = 2
于 2017-04-19T12:56:58.820 回答