[SQL] SQL 쿼리는 급여 테이블에서 N 번째 가장 높은 급여를 찾을 수
SQLSQL 쿼리는 급여 테이블에서 N 번째 가장 높은 급여를 찾을 수
어떻게 SQL Server의 급여를 포함하는 테이블에서 N 번째 가장 높은 급여를 찾을 수 있습니까?
해결법
-
==============================
1.당신은 대답을 유도하기 위해 공통 테이블 식 (CTE)를 사용할 수 있습니다.
당신은 대답을 유도하기 위해 공통 테이블 식 (CTE)를 사용할 수 있습니다.
하자 당신이 테이블 급여에서 다음과 같은 급여를 말한다 :
EmployeeID Salary -------------------- 10101 50,000 90140 35,000 90151 72,000 18010 39,000 92389 80,000
우리는 사용합니다 :
DECLARE @N int SET @N = 3 -- Change the value here to pick a different salary rank SELECT Salary FROM ( SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary FROM Salaries ) as SalaryCTE WHERE SalaryRank = @N
이것은 (세 번째로 높은 기록을 포함하는) 세 번째 행을가 내림차순으로 급여으로 분류 한 후 다음 각 행에 대한 행 번호를 생성 검색합니다.
CTE를 원하지 않는다 (또는 2000 SQL에 갇혀있다) 분들을 위해 :
[주 :이 수행하는 상기 예보다 현저하게 더; CTE에 대한 36 %와 부질 64 %]의 쿼리 비용 실행 플랜 쇼로 나란히 실행 :
SELECT TOP 1 Salary FROM ( SELECT TOP N Salary FROM Salaries ORDER BY Salary DESC ) SalarySubquery ORDER BY Salary ASC
여기서 N은 사용자에 의해 정의된다.
SalarySubquery 내가 서브 쿼리, 또는 괄호에있는 쿼리에 준 별명입니다.
무엇 하위 쿼리가하는 것은 가장 큰 봉급으로 그들을 (이 경우 3 말 것) 상단의 N 급여를 선택하고, 주문이다.
우리는 세 번째로 높은 연봉을보고 싶은 경우, 하위 쿼리 반환합니다 :
Salary ----------- 80,000 72,000 50,000
외부 쿼리는 우리가 가장 큰에 작은에서 정렬이 시간을 오름차순으로 정렬하고를 제외하고, 그래서 5 만이 첫 번째 레코드가 오름차순으로 정렬 될 것이다, 서브 쿼리에서 첫 번째 급여를 선택합니다.
당신이 볼 수 있듯이, 50,000 실제로 예에서 세 번째로 높은 연봉이다.
-
==============================
2.당신은 특정 행을 선택하는 ROW_NUMBER 사용할 수 있습니다. 예를 들어, 42 가장 높은 급여 :
당신은 특정 행을 선택하는 ROW_NUMBER 사용할 수 있습니다. 예를 들어, 42 가장 높은 급여 :
select * from ( select row_number() over (order by Salary desc) as rn , * from YourTable ) as Subquery where rn = 42
ROW_NUMBER와 같은 윈도우 함수는 조항에 의해 선택하거나 순서대로 표시 할 수 있습니다. 해결 방법은 하위 쿼리에 ROW_NUMBER를 배치합니다.
-
==============================
3.
select MIN(salary) from ( select top 5 salary from employees order by salary desc) x
-
==============================
4.
EmpID Name Salary 1 A 100 2 B 800 3 C 300 4 D 400 5 E 500 6 F 200 7 G 600 SELECT * FROM Employee E1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(E2.Salary)) FROM Employee E2 WHERE E2.Salary > E1.Salary )
당신은 5 가장 높은 직원보다 급여 이상을 가지고 총 4 명의 직원이 의미 다섯째 가장 높은 급여를 검색해야하는 경우를 가정 해 봅시다. 그래서 외부 쿼리의 각 행에 대해 현재 급여보다 큰 급여의 총 수를 확인합니다. 외부 쿼리가 일치하지 않습니다 (5-1) = 6 outerquery의 절을 100 첫째 작동하고 6 될 것입니다 (100)보다 더 큰 임금의 번호를 확인합니다. 그런 다음 800, 체크 (800)보다 큰 급여의 번호를, 마지막으로 300 4 = 거짓 다음 작업은 표 4 개 레코드를 완전히 거기에 이상 300 따라서 4 = 4 where 절을 충족하고 돌아갑니다 (3) C (300).
-
==============================
5.시도 해봐...
시도 해봐...
use table_name select MAX(salary) from emp_salary WHERE marks NOT IN (select MAX(marks) from student_marks )
-
==============================
6.오라클, MySQL의 등 특별한 기능의 특정을 사용하지 않고 간단한 방법 EMPLOYEE 테이블의 급여에서 가정하는 것은 반복 할 수 있습니다. 각 ID의 순위를 알아 쿼리를 사용합니다.
오라클, MySQL의 등 특별한 기능의 특정을 사용하지 않고 간단한 방법 EMPLOYEE 테이블의 급여에서 가정하는 것은 반복 할 수 있습니다. 각 ID의 순위를 알아 쿼리를 사용합니다.
select * from ( select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from EMPLOYEE ) where distsal >tout.sal) as rank from EMPLOYEE tout ) result order by rank
처음에 우리는 별개의 급여를 찾을 수 있습니다. 그럼 우리가 각 행보다 큰 별개의 급여의 수를 알아보십시오. 이것은 아무것도하지만 ID의 순위입니다. 가장 높은 급여의 경우,이 카운트는 0이됩니다. 그래서 '+1'이 1 순위를 시작하기 위해 수행됩니다.
이제 우리는 위의 쿼리에 WHERE 절을 추가하여 N 번째 순위에서 ID를 얻을 수 있습니다.
select * from ( select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from EMPLOYEE ) where distsal >tout.sal) as rank from EMPLOYEE tout ) result where rank = N;
-
==============================
7.가장 쉬운 방법은 SQL에서 테이블에서 두번째 가장 높은 급여를 얻을 수 있습니다 :
가장 쉬운 방법은 SQL에서 테이블에서 두번째 가장 높은 급여를 얻을 수 있습니다 :
sql> select max(sal) from emp where sal not in (select max(sal) from emp);
-
==============================
8.망가는 별개의 키워드를 사용하는 것을 잊지 : -
망가는 별개의 키워드를 사용하는 것을 잊지 : -
SELECT TOP 1 Salary FROM ( SELECT Distinct TOP N Salary FROM Salaries ORDER BY Salary DESC ) SalarySubquery ORDER BY Salary ASC
-
==============================
9.해결 방법 1 : (참고 : 때문에 서브 쿼리의 성능이 낮은) SQL 서버, MySQL은, DB2, 오라클, 테라 데이타에서 작동합니다 N 번째 가장 높은 급여, 그리고 거의 모든 다른 RDBMS를 찾기 위해이 SQL
해결 방법 1 : (참고 : 때문에 서브 쿼리의 성능이 낮은) SQL 서버, MySQL은, DB2, 오라클, 테라 데이타에서 작동합니다 N 번째 가장 높은 급여, 그리고 거의 모든 다른 RDBMS를 찾기 위해이 SQL
SELECT * /*This is the outer query part */ FROM Employee Emp1 WHERE (N-1) = ( /* Subquery starts here */ SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > Emp1.Salary)
위의 쿼리에서 이해하는 가장 중요한 것은 서브 쿼리가 행이 외부 쿼리에 의해 처리되는 각각의 모든 시간을 평가한다는 것입니다. 내부 질의뿐만 아니라 Emp1 값을 사용하기 때문에 즉, 내부 질의는 독립적 외부 쿼리를 처리 할 수 없다.
N 번째 높은 연봉을 발견하기 위해, 우리는 단지 자체보다 정확히 N-1 급여 이상이 급여를 찾을 수 있습니다.
해결 방법 2 : SQL Server의 TOP 키워드를 사용하여 n 번째 가장 높은 급여를 찾기
SELECT TOP 1 Salary FROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC ) AS Emp ORDER BY Salary
해결 방법 3 : TOP을 사용하지 않고 SQL Server에서 n 번째 가장 높은 급여를 찾기
SELECT Salary FROM Employee ORDER BY Salary DESC OFFSET N-1 ROW(S) FETCH FIRST ROW ONLY
참고 나는 개인적으로 위의 SQL을 테스트하지 않았는지, 그리고 난 그렇게 믿어 SQL Server의 그것만이 작업을 2012 년까지.
-
==============================
10.
SELECT * FROM (select distinct postalcode from Customers order by postalcode DESC) limit 4,1;
4 여기 수단은 처음 4 떠나 다음 1을 보여줍니다.
그것은 나를 위해 작동이보십시오.
-
==============================
11.n 번째 가장 높은 급여를 찾을 수 하나 개의 쿼리 아주 간단합니다
n 번째 가장 높은 급여를 찾을 수 하나 개의 쿼리 아주 간단합니다
SELECT DISTINCT(Sal) FROM emp ORDER BY Salary DESC LIMIT n,1
from https://stackoverflow.com/questions/3850034/sql-query-to-find-nth-highest-salary-from-a-salary-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 잠금 장치의 총 수는 로크 테이블 크기를 초과 (0) | 2020.04.26 |
---|---|
[SQL] IN () 절에 SQL 매개 변수를 전달하면 .NET에서 데이터 집합을 입력하여 (0) | 2020.04.26 |
[SQL] IF는 조건이 PLSQL 작동하지 EXISTS (0) | 2020.04.26 |
[SQL] SQL Server 관리 Studio에서 스크립트를 생성 (0) | 2020.04.26 |
[SQL] 오라클 널 (null) == null이 결정 (0) | 2020.04.26 |