0

sal(salary)、name、empno(employee number) の 3 つの「NOT NULL」フィールドで構成されるテーブル「EMP」から、2 番目に高い給与を選択するための革新的なクエリを誰かが提案できますか?

私は1つを持っている:

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

これは最も好ましいインタビューの質問です. この質問はさまざまな方法で解決できます - クエリ 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 番目に高い給与を得たい場合は、2 の代わりに N(1/2/3/4/..N) を指定するだけです。

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

2 番目に高い給与を検索するためのクエリ。

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 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 に答える
0

これは SOF で既に回答されています。必要に応じて十分に革新的であるかどうかを判断する必要があります。

2 番目に大きい値を見つけるための最も簡単な SQL クエリは何ですか?

テーブルから 2 番目または 3 番目に大きいエントリを取得する方法

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 で 2 番目に高く、R=3 で 3 番目に高くなります。

ここでフィドルを試すことができますhttp://sqlfiddle.com/#!4/a6f42/14

于 2013-01-28T09:22:17.443 に答える