[SQL] 오라클의 N 번째 최대 급여
SQL오라클의 N 번째 최대 급여
내가 쿼리 아래 사용하고 오라클의 N 번째 최대 샐를 찾으려면
SELECT DISTINCE sal
FROM emp a
WHERE (
SELECT COUNT(DISTINCE sal)
FROM emp b
WHERE a.sal<=b.sal)=&n;
해결법
-
==============================
1.이 시도
이 시도
select * from ( select sal ,dense_rank() over (order by sal desc) ranking from table ) where ranking = 4 -- Replace 4 with any value of N
-
==============================
2.
SELECT sal FROM ( SELECT sal, row_number() OVER (order by sal desc) AS rn FROM emp ) WHERE rn = 3
네, 테이블이 큰 경우 실행하는 데 시간이 더 소요됩니다. "N 번째 행이"유일한 방법은 쿼리에 대한 그러나 모든 데이터를 통해 일종의 그것을 보는 것입니다. 당신이 샐에 인덱스를 가지고 있다면 그것은 확실히 훨씬 더 빨리 될 것입니다.
-
==============================
3.
SELECT * FROM Employee Emp1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > Emp1.Salary)
-
==============================
4.또한 언급 한 다음과 같이 우리가 쓸 수 있습니다.
또한 언급 한 다음과 같이 우리가 쓸 수 있습니다.
행 분 (SAL)을 선택 (EMP로부터 선택 SAL 어디 ROWNUM =
-
==============================
5.이 테이블 직원의 3 최대 급여를 표시합니다. 당신이 다음 값을 (당신이 원하는 무엇이든) 5 또는 6을 찾으려면 단지 ROWNUM <= 5 "또는"ROWNUM <= 6 등이 같은 경우 조건을 변경 ...
이 테이블 직원의 3 최대 급여를 표시합니다. 당신이 다음 값을 (당신이 원하는 무엇이든) 5 또는 6을 찾으려면 단지 ROWNUM <= 5 "또는"ROWNUM <= 6 등이 같은 경우 조건을 변경 ...
select min(sal) from(select distinct(sal) from emp where rownum<=3 order by sal desc);
-
==============================
6.
SELECT sal FROM ( SELECT empno, deptno, sal, dense_rank( ) over ( partition by deptno order by sal desc) NRANK FROM emp ) WHERE NRANK = 4
-
==============================
7.
SELECT * FROM ( SELECT empno, deptno, sal, dense_rank( ) over ( order by sal desc) NRANK FROM emp ) WHERE NRANK = 4
-
==============================
8.당신이 원하는 번호 2를 대체 할 수있다
당신이 원하는 번호 2를 대체 할 수있다
select * from ( select distinct (sal),ROW_NUMBER() OVER (order by sal desc) rn from emp ) where rn=2
-
==============================
9.n 번째 가장 높은 급여를 가져 오는 쿼리 다음을 참조하십시오. 이 방법으로 당신은 n 번째 가장 높은 급여를 얻을. 당신이 얻을 n 번째 가장 낮은 연봉을 원하는 경우에만 쿼리에 ASC에 의해 DESC를 교체해야합니다.
n 번째 가장 높은 급여를 가져 오는 쿼리 다음을 참조하십시오. 이 방법으로 당신은 n 번째 가장 높은 급여를 얻을. 당신이 얻을 n 번째 가장 낮은 연봉을 원하는 경우에만 쿼리에 ASC에 의해 DESC를 교체해야합니다.
-
==============================
10.지금 당신은 당신이 확실히 얻을 것이다이 시도 :
지금 당신은 당신이 확실히 얻을 것이다이 시도 :
SELECT DISTINCT sal FROM emp a WHERE ( SELECT COUNT(DISTINCT sal) FROM emp b WHERE a.sal<=b.sal)=&n;
귀하의 정보를 들어, n 번째 최소 샐를 원하는 경우 :
SELECT DISTINCT sal FROM emp a WHERE ( SELECT COUNT(DISTINCT sal) FROM emp b WHERE a.sal>=b.sal)=&n;
-
==============================
11.행 분 (SAL)을 선택 (샐 DESC 직원들의 순서 구별 SAL 해당) 여기서 ROWNUM <= N;
행 분 (SAL)을 선택 (샐 DESC 직원들의 순서 구별 SAL 해당) 여기서 ROWNUM <= N;
가장 높은 염은 검색하려는 어떤 수를 놓습니다.
-
==============================
12.밖으로 다음보십시오 :
밖으로 다음보십시오 :
SELECT * FROM (SELECT rownum AS rn, a.* FROM (WITH DATA AS -- creating dummy data ( SELECT 'MOHAN' AS NAME, 200 AS SALARY FROM DUAL UNION ALL SELECT 'AKSHAY' AS NAME, 500 AS SALARY FROM DUAL UNION ALL SELECT 'HARI' AS NAME, 300 AS SALARY FROM DUAL UNION ALL SELECT 'RAM' AS NAME, 400 AS SALARY FROM DUAL ) SELECT D.* FROM DATA D ORDER BY SALARY DESC ) A ) WHERE rn = 3; -- specify N'th highest here (In this case fetching 3'rd highest)
건배!
-
==============================
13.
select * FROM ( select EmployeeID, Salary , dense_rank() over (order by Salary DESC) ranking from Employee ) WHERE ranking = N;
급여에 사용 DENSE_RANK ()가 same.So이 대신 순위를 사용하는 적절한 출력을 제공되어야한다 ().
-
==============================
14.
SELECT TOP (1) Salary FROM ( SELECT DISTINCT TOP (10) Salary FROM Employee ORDER BY Salary DESC ) AS Emp ORDER BY Salary
이것은 당신이 N 10를 대체 할 수있는, 10 일 최대 급여입니다.
-
==============================
15.이러한 쿼리는 또한 작동합니다 :
이러한 쿼리는 또한 작동합니다 :
해결 방법 1)
SELECT ename, sal FROM Emp e1 WHERE n-1 = (SELECT COUNT(DISTINCT sal) FROM Emp e2 WHERE e2.sal > e1.sal)
ROW_NUM 기능을 사용하여) 2 해결 방법.
SELECT * FROM ( SELECT e.*, ROW_NUMBER() OVER (ORDER BY sal DESC) rn FROM Emp e ) WHERE rn = n;
대안 3) ROWNUM 의사 열을 사용하여
Select MAX(SAL) from ( Select * from ( Select * from EMP order by SAL Desc ) where rownum <= n )
-
==============================
16.이것은 또한 작동합니다 :
이것은 또한 작동합니다 :
with data as ( select sal,rwid from ( select salary as sal,rowid as rwid from salary order by salary desc ) where rownum < 5 ) select * from salary a where rowid = (select min(rwid) from data)
-
==============================
17.
select min(sal) from (select distinct(sal) from emp order by sal desc) where rownum <=&n;
속옷 아래 주어진 출력 아래를 제공 SAL DESC 의해 EMP 순서 구별 (SAL)을 선택하여 질의.
의지 5000 3000 2,975 2,850 2,450 1,600 1,500 1,300 1,250 1,100 950 (800)
샐 내림차순으로 EMP 순서에서 위의 쿼리를 선택 샐에서 구별없이 출력은 아래와 같이 주어진다.
의지 5000 3000 3000 2,975 2,850 2,450 1,600 1,500 1,300 1,250 1,250 1,100 950 (800)
아래로 외부 쿼리는 내가 넣어 4 최대 샐과에서 여기 시도 (예를 들어,을)를 'N 번째 최대 샐를 제공 할 것입니다.
MIN (SAL) 2,850
-
==============================
18.
Select min(salary) from ( select distinct(salary) from empdetails order by salary desc ) where rownum <=&rn
그냥 당신이 원하는 n 번째 번호를 입력합니다.
-
==============================
19.이 시도:
이 시도:
SELECT min(sal) FROM ( SELECT sal FROM emp ORDER BY sal desc) WHERE ROWNUM <= 3; -- Replace 3 with any value of N
-
==============================
20.당신은 DENSE_RANK () 함수를 사용하여 쿼리를 최적화 할 수 있습니다.
당신은 DENSE_RANK () 함수를 사용하여 쿼리를 최적화 할 수 있습니다.
예를 들어 :
구별 급여를 선택 (선택한 급여 DENSE_RANK () 급여하여 위에 DESC (순서) 랭킹 직원에서 ) 순위 = 6
참고 : 6 순위하는 n 차의 수입니다.
-
==============================
21.
SELECT Min(sal) FROM (SELECT DISTINCT sal FROM emp WHERE sal IS NOT NULL ORDER BY sal DESC) WHERE rownum <= n;
-
==============================
22.
select * from (select rownum as rownumber,emp1.* from (select * from emp order by sal desc) emp1) where rownumber = 3;
-
==============================
23.5 가장 높은 연봉 :
5 가장 높은 연봉 :
SELECT * FROM emp a WHERE 4 = ( SELECT COUNT(DISTINCT b.sal) FROM emp b WHERE a.sal < b.sal )
N. 임의의 값으로 교체 4
-
==============================
24.세 가지 방법이 있습니다 있습니다 ...
세 가지 방법이 있습니다 있습니다 ...
SELECT salary,first_name,rnk FROM (SELECT salary,first_name,rank() over (order by salary desc nulls last) as rnk from emp) where rnk=3; SELECT salary,first_name,rnk FROM (SELECT salary,first_name,dense_rank() over (order by salary desc nulls last) as rnk from emp) where rnk=3; select rnk,first_name,salary from (select rownum as rnk ,first_name,salary from (select first_name,salary from emp order by salary desc nulls last)) where rnk=3
from https://stackoverflow.com/questions/20091125/nth-max-salary-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] T-SQL 등 %의 매개 변수 % 절 (0) | 2020.05.12 |
---|---|
[SQL] MAX와 GROUP BY를 사용하여 모든 해당 필드를 선택 (0) | 2020.05.12 |
[SQL] 치명적인 오류 : C에서 정의 함수 sqlsrv_connect 문안 () : \ XAMPP \ htdocs에 (0) | 2020.05.12 |
[SQL] 테이블 또는 열 이름은 숫자로 시작할 수 없습니다? (0) | 2020.05.12 |
[SQL] 오라클 포스트 그레스 'DISTINCT ON의 동등한? (0) | 2020.05.12 |