[SQL] 어떻게 급여 테이블에서 세 번째 또는 n 번째 최대 급여를 찾는 방법은?
SQL어떻게 급여 테이블에서 세 번째 또는 n 번째 최대 급여를 찾는 방법은?
어떻게 최적화 된 방법으로 급여 테이블 (다는 EmpID, EmpName, EmpSalary)에서 세 번째 또는 n 번째 최대 급여를 찾는 방법은?
해결법
-
==============================
1.사용 (원하는 경우 단일) ROW_NUMBER 또는 (관련된 모든 행에 대해) DENSE_RANK :
사용 (원하는 경우 단일) ROW_NUMBER 또는 (관련된 모든 행에 대해) DENSE_RANK :
WITH CTE AS ( SELECT EmpID, EmpName, EmpSalary, RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC) FROM dbo.Salary ) SELECT EmpID, EmpName, EmpSalary FROM CTE WHERE RN = @NthRow
-
==============================
2.행 수 :
행 수 :
SELECT Salary,EmpName FROM ( SELECT Salary,EmpName,ROW_NUMBER() OVER(ORDER BY Salary) As RowNum FROM EMPLOYEE ) As A WHERE A.RowNum IN (2,3)
하위 쿼리 :
SELECT * FROM Employee Emp1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > Emp1.Salary )
최고 키워드 :
SELECT TOP 1 salary FROM ( SELECT DISTINCT TOP n salary FROM employee ORDER BY salary DESC ) a ORDER BY salary
-
==============================
3.이 시도
이 시도
SELECT TOP 1 salary FROM ( SELECT TOP 3 salary FROM employees ORDER BY salary DESC) AS emp ORDER BY salary ASC
3 당신은 어떤 값을 대체 할 수 ...
-
==============================
4.당신은 n 번째 최대와 최소 급여 쿼리 그래서 최적화 방법 수단은, TOP 키워드를 사용하려는 경우로서 다음하지만 쿼리는 집계 함수 이름을 사용하여 역순으로 까다로운 같이 :
당신은 n 번째 최대와 최소 급여 쿼리 그래서 최적화 방법 수단은, TOP 키워드를 사용하려는 경우로서 다음하지만 쿼리는 집계 함수 이름을 사용하여 역순으로 까다로운 같이 :
N 최대 급여 :
SELECT MIN(EmpSalary) FROM Salary WHERE EmpSalary IN(SELECT TOP N EmpSalary FROM Salary ORDER BY EmpSalary DESC)
예를 들면 : 3 최대 급여 :
SELECT MIN(EmpSalary) FROM Salary WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary DESC)
N 최소 급여 :
SELECT MAX(EmpSalary) FROM Salary WHERE EmpSalary IN(SELECT TOP N EmpSalary FROM Salary ORDER BY EmpSalary ASC)
예를 들어 3 최소 급여 :
SELECT MAX(EmpSalary) FROM Salary WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary ASC)
-
==============================
5.너무 간단한 당신이 하위 쿼리를 사용하는 경우!
너무 간단한 당신이 하위 쿼리를 사용하는 경우!
SELECT MIN(EmpSalary) from ( SELECT EmpSalary from Employee ORDER BY EmpSalary DESC LIMIT 3 );
당신은 여기에 단지 LIMIT 제한 후 n 번째 값을 변경할 수 있습니다.
다음은이 직원 주문에서 EmpSalary DESC 제한 3으로 하위 쿼리 선택 EmpSalary에; 직원들의 상위 3 개 급여를 반환합니다. 결과 중 우리는 직원의 3 TOP 급여를 얻을 수 MIN 명령을 사용하여 최소 급여를 선택합니다.
-
==============================
6.당신의 최대 수와 N 교체
당신의 최대 수와 N 교체
SELECT * FROM Employee Emp1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > Emp1.Salary)
설명
내부 쿼리 (서브 쿼리)이이 케이스 Emp1 테이블에 외부 쿼리에서 값을 (사용하기 때문에 상관 하위 쿼리라고 어떤 내부 쿼리입니다 - 위의 쿼리는 전에 같은 것을 본적이 없다면 매우 혼동이 될 수 있습니다 )에서이 WHERE 절입니다.
그리고 소스
-
==============================
7.서브 쿼리를 사용하지 않고 급여 테이블에서 제 3 또는 제 n 번째 최대 급여
서브 쿼리를 사용하지 않고 급여 테이블에서 제 3 또는 제 n 번째 최대 급여
select salary from salary ORDER BY salary DESC OFFSET N-1 ROWS FETCH NEXT 1 ROWS ONLY
셋째 들어 가장 높은 급여는 N-1 대신에 2를 넣어
-
==============================
8.
SELECT Salary,EmpName FROM ( SELECT Salary,EmpName,DENSE_RANK() OVER(ORDER BY Salary DESC) Rno from EMPLOYEE ) tbl WHERE Rno=3
-
==============================
9.n 번째 가장 높은 급여를 가져 오는 쿼리 다음을 참조하십시오. 이 방법으로 당신은 MYSQL에서 n 번째 가장 높은 급여를 얻을. 당신이 얻을 n 번째 가장 낮은 연봉을 원하는 경우에만 쿼리에 ASC에 의해 DESC를 교체해야합니다.
n 번째 가장 높은 급여를 가져 오는 쿼리 다음을 참조하십시오. 이 방법으로 당신은 MYSQL에서 n 번째 가장 높은 급여를 얻을. 당신이 얻을 n 번째 가장 낮은 연봉을 원하는 경우에만 쿼리에 ASC에 의해 DESC를 교체해야합니다.
-
==============================
10.방법 1 :
방법 1 :
SELECT TOP 1 salary FROM ( SELECT TOP 3 salary FROM employees ORDER BY salary DESC) AS emp ORDER BY salary ASC
방법 2 :
Select EmpName,salary from ( select EmpName,salary ,Row_Number() over(order by salary desc) as rowid from EmpTbl) as a where rowid=3
-
==============================
11.
SELECT EmpSalary FROM salary_table GROUP BY EmpSalary ORDER BY EmpSalary DESC LIMIT n-1, 1;
-
==============================
12.2008 년 우리는 우리가 사용할 수있는 관계없이 순위를 얻을 수 ROW_NUMBER () OVER (EmpSalary DESC BY ORDER)를 사용할 수 있습니다.
2008 년 우리는 우리가 사용할 수있는 관계없이 순위를 얻을 수 ROW_NUMBER () OVER (EmpSalary DESC BY ORDER)를 사용할 수 있습니다.
예를 들어 우리는 뭔가 다른 8 높은 이런 식으로, 또는 변경 @N를 얻을 수 또는 같은 경우 함수에서 매개 변수로 당신이 그것을 사용할 수 있습니다.
DECLARE @N INT = 8; WITH rankedSalaries AS ( SELECT EmpID ,EmpName ,EmpSalary, ,RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC) FROM salary ) SELECT EmpID ,EmpName ,EmpSalary FROM rankedSalaries WHERE RN = @N;
SQL 서버 2012 년이이 LAG를 사용하여 더 직관적으로 수행 알 수있다 ()를 사용합니다.
-
==============================
13.
declare @maxNthSal as nvarchar(20) SELECT TOP 3 @maxNthSal=GRN_NAME FROM GRN_HDR ORDER BY GRN_NAME DESC print @maxNthSal
-
==============================
14.이것은 어떤 SQL 인터뷰에서 인기있는 질문 중 하나입니다. 나는 열 n 번째 가장 높은 값을 찾기 위해 다른 쿼리를 작성하는 것입니다.
이것은 어떤 SQL 인터뷰에서 인기있는 질문 중 하나입니다. 나는 열 n 번째 가장 높은 값을 찾기 위해 다른 쿼리를 작성하는 것입니다.
나는 스크립트 아래를 실행하여 "직원"라는 이름의 테이블을 만들었습니다.
CREATE TABLE Employee([Eid] [float] NULL,[Ename] [nvarchar](255) NULL,[Basic_Sal] [float] NULL)
지금은 삽입 문 아래 실행하여이 테이블에 8 행을 삽입하기 위하여려고하고있다.
insert into Employee values(1,'Neeraj',45000) insert into Employee values(2,'Ankit',5000) insert into Employee values(3,'Akshay',6000) insert into Employee values(4,'Ramesh',7600) insert into Employee values(5,'Vikas',4000) insert into Employee values(7,'Neha',8500) insert into Employee values(8,'Shivika',4500) insert into Employee values(9,'Tarun',9500)
이제 우리는 다른 쿼리를 사용하여 위의 표에서 세번째 높은 Basic_sal을 찾을 수 있습니다. 내가 관리 스튜디오에서 쿼리 아래를 실행하고 아래의 결과입니다했다.
select * from Employee order by Basic_Sal desc
3 가장 높은 기본 급여 내가 같은 일을 3 개 가지 방법을 쓰고 있어요 8500이 될 것이라는 점을 우리는 위의 이미지에서 볼 수 있습니다. 쿼리 아래에 언급 한 세 가지를 실행함으로써 우리는 즉 8500 같은 결과를 얻을 것이다.
첫 번째 방법 : - 행 번호 기능을 사용하여
select Ename,Basic_sal from( select Ename,Basic_Sal,ROW_NUMBER() over (order by Basic_Sal desc) as rowid from Employee )A where rowid=2
-
==============================
15.
Select TOP 1 Salary as '3rd Highest Salary' from (SELECT DISTINCT TOP 3 Salary from Employee ORDER BY Salary DESC) a ORDER BY Salary ASC;
나는 3 가장 높은 연봉을 표시하고
-
==============================
16.
SELECT MIN(COLUMN_NAME) FROM ( SELECT DISTINCT TOP 3 COLUMN_NAME FROM TABLE_NAME ORDER BY COLUMN_NAME DESC ) AS 'COLUMN_NAME'
-
==============================
17.--nth 가장 높은 급여
--nth 가장 높은 급여
select * from (select lstName, salary, row_number() over( order by salary desc) as rn from employee) tmp where rn = 2
- (제 n-1) 높은 급여
select * from employee e1 where 1 = (select count(distinct salary) from employee e2 where e2.Salary > e1.Salary )
-
==============================
18.방법을 최적화 대신 하위 쿼리 만 사용 제한.
방법을 최적화 대신 하위 쿼리 만 사용 제한.
select distinct salary from employee order by salary desc limit nth, 1;
제한 구문 여기 http://www.mysqltutorial.org/mysql-limit.aspx를 참조하십시오
-
==============================
19.테이블에서 세 번째로 높은 값을 얻으려면
테이블에서 세 번째로 높은 값을 얻으려면
SELECT * FROM tableName ORDER BY columnName DESC LIMIT 2, 1
-
==============================
20.하위 쿼리로 :
하위 쿼리로 :
SELECT salary from (SELECT rownum ID, EmpSalary salary from (SELECT DISTINCT EmpSalary from salary_table order by EmpSalary DESC) where ID = nth)
-
==============================
21.이 쿼리
이 쿼리
SELECT DISTINCT salary FROM emp E WHERE &no =(SELECT COUNT(DISTINCT salary) FROM emp WHERE E.salary <= salary)
넣어 n을 가치 = 원하는
-
==============================
22.
set @n = $n SELECT a.* FROM ( select a.* , @rn = @rn+1 from EMPLOYEE order by a.EmpSalary desc ) As a where rn = @n
-
==============================
23.MySQL은 솔루션, N = 4 가정 테스트 :
MySQL은 솔루션, N = 4 가정 테스트 :
select min(CustomerID) from (SELECT distinct CustomerID FROM Customers order by CustomerID desc LIMIT 4) as A;
또 다른 예:
select min(country) from (SELECT distinct country FROM Customers order by country desc limit 3);
-
==============================
24.이 코드를 사용해보십시오 : -
이 코드를 사용해보십시오 : -
SELECT * FROM one one1 WHERE ( n ) = ( SELECT COUNT( one2.salary ) FROM one one2 WHERE one2.salary >= one1.salary )
-
==============================
25.이거 한번 해봐...
이거 한번 해봐...
SELECT MAX(salary) FROM employee WHERE salary NOT IN (SELECT * FROM employee ORDERBY salary DESC LIMIT n-1)
-
==============================
26.
select Min(salary) from ( select salary from employees order by salary desc) t where rownum<=3;
2 가장 높은 급여, 위의 쿼리에서 2로 변경 3 및 N에 N 번째 가장 높은 급여에 대한 여기서 N = 1, 2, 3, 4 ....
-
==============================
27.SELECT * FROM는 한계 4,1 (급여 DESC하여 고객 주문 구별 급여를 선택)
SELECT * FROM는 한계 4,1 (급여 DESC하여 고객 주문 구별 급여를 선택)
제한 4,1 수단은 처음 4 개 행을두고 한 후 다음 중 하나를 선택합니다.
제한 및 ROWNUMBER은 사용중인 플랫폼에 따라 달라집니다.
이 시도, 그것은 작동합니다.
-
==============================
28.참고 : 교체하십시오 3 OFFSET
참고 : 교체하십시오 3 OFFSET
-
==============================
29.서브 쿼리는 항상 시간이 더 걸릴 :
서브 쿼리는 항상 시간이 더 걸릴 :
임의 최고 및 최저 데이터를 가져 오기 위해 쿼리 아래 사용
최고 데이터 : ID 내림차순 한계 3,1에 의해 비즈니스 순서에서 선택 *;
최저 데이터 : ID 오름차순 한계 3,1에 의해 비즈니스 순서에서 선택 *;
n 번째 데이터를 얻을 수 3의 장소에서 N을 사용할 수 있습니다.
-
==============================
30.테이블에서 N 번째 가장 높은 급여를 찾습니다. 여기 DENSE_RANK () 함수를 사용하여이 작업을 할 수있는 방법이다.
테이블에서 N 번째 가장 높은 급여를 찾습니다. 여기 DENSE_RANK () 함수를 사용하여이 작업을 할 수있는 방법이다.
select linkorder from u_links select max(linkorder) from u_links select max(linkorder) from u_links where linkorder < (select max(linkorder) from u_links) select top 1 linkorder from ( select distinct top 2 linkorder from u_links order by linkorder desc) tmp order by linkorder asc
DENSE_RANK : 1. DENSE_RANK 행의 정렬 그룹에서 행의 순위를 계산하고 숫자로 순위를 반환합니다. 순위는 1로 시작하는 연속적인 정수입니다. 2.이 기능은 모든 숫자 데이터 유형 및 반환 번호 등의 인수를 받아들입니다. 3. 분석 함수로서 DENSE_RANK는 order_by_clause에서 value_exprs의 값을 기준으로 다른 행에 대해 반환되는 각 행의 계수를 계산한다. 위의 질의 4.이 순위는 직원 테이블의 샐에 따라 반환됩니다. 동점의 경우, 모든 행과 동일한 순위를 할당한다.
WITH result AS ( SELECT linkorder ,DENSE_RANK() OVER ( ORDER BY linkorder DESC ) AS DanseRank FROM u_links ) SELECT TOP 1 linkorder FROM result WHERE DanseRank = 5
from https://stackoverflow.com/questions/16234983/how-to-find-third-or-nth-maximum-salary-from-salary-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 내부는 여러 컬럼에 가입 할 방법 (0) | 2020.05.17 |
---|---|
[SQL] 선택 SQL Server 데이터베이스 크기 (0) | 2020.05.17 |
[SQL] # 1273 - 알 수없는 정렬 : 'utf8mb4_unicode_520_ci' (0) | 2020.05.17 |
[SQL] MySQL은 컬럼에서 동일한 값이 행을 찾기 (0) | 2020.05.17 |
[SQL] 테스트 SQL 쿼리에 가장 좋은 방법은 [마감] (0) | 2020.05.17 |