MySQL 테이블에서 두 번째로 높은 값 가져오기
직원과 급여에 대한 표가 그렇게 정의되어 있습니다.
"name" (type: VARCHAR)
"salary" (type: INTEGER)
이 표에서 두 번째로 높은 급여를 받으려면 어떤 쿼리를 사용해야 합니까?
여기에 넥타이를 설명하는 것이 있습니다.
Name Salary
Jim 6
Foo 5
Bar 5
Steve 4
SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees WHERE salary < (SELECT MAX(salary) FROM employees))
Result --> Bar 5, Foo 5
편집: 마노즈의 두 번째 게시물을 가져가서 수정하고 조금 더 사람이 읽을 수 있게 만들었습니다.남자1에게 직관적이지는 않지만 내가 원하는 값을 사용하면 2=2등, 3=3등이 됩니다.
/* looking for 2nd highest salary -- notice the '=2' */
SELECT name,salary FROM employees
WHERE salary = (SELECT DISTINCT(salary) FROM employees as e1
WHERE (SELECT COUNT(DISTINCT(salary))=2 FROM employees as e2
WHERE e1.salary <= e2.salary)) ORDER BY name
Result --> Bar 5, Foo 5
두 번째로 높은 연봉에 대한 단도직입적인 답변
SELECT name, salary
FROM employees ORDER BY `employees`.`salary` DESC LIMIT 1 , 1
또 하나의 재미있는 해결책
SELECT salary
FROM emp
WHERE salary = (SELECT DISTINCT(salary)
FROM emp as e1
WHERE (n) = (SELECT COUNT(DISTINCT(salary))
FROM emp as e2
WHERE e1.salary <= e2.salary))
제가 이 질문에 대답하기에 많이 늦은 것 같습니다.같은 출력을 얻기 위해 이 라이너 하나는 어떻습니까?
SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1,1 ;
샘플 fiddle: https://www.db-fiddle.com/f/v4gZUMFbuYorB27AH9yBKy/0
create table svalue (
name varchar(5),
value int
) engine = myisam;
insert into svalue value ('aaa',30),('bbb',10),('ccc',30),('ddd',20);
select * from svalue where value = (
select value
from svalue
group by value
order by value desc limit 1,1)
두 번째 마지막 작업:
SELECT name, salary
FROM employee
ORDER BY salary DESC
LIMIT 1 , 1
마지막 세 번째 경우:
SELECT name, salary
FROM employee
ORDER BY salary DESC
LIMIT 2 , 1
아래에 언급된 쿼리를 사용할 수 있습니다.
SELECT emp.name, emp.salary
FROM employees emp
WHERE 2 = (SELECT COUNT(DISTINCT salary)
FROM employees
WHERE emp.salary<=salary
);
2개를 원하는 최고 기록으로 변경할 수 있습니다.
두 번째로 큰 표시 값을 가진 레코드를 표시하는 방법:
SELECT username, mark
FROM tbl_one
WHERE mark = (
SELECT DISTINCT mark
FROM tbl_one
ORDER by mark desc
LIMIT 1,1
);
간단한 해결책
SELECT * FROM TBLNAME ORDER BY COLNAME ASC LIMIT (n - x), 1
참고 : n = 열에 있는 총 레코드 수
x = value 2nd, 3rd, 4th highest etc
예
//to find employee with 7th highest salary
n = 100
x = 7
SELECT * FROM tbl_employee ORDER BY salary ASC LIMIT 93, 1
이게 도움이 되기를 바랍니다.
또 다른 흥미로운 해결책을 찾았습니다.
SELECT salary
FROM emp
WHERE salary = (SELECT DISTINCT(salary)
FROM emp as e1
WHERE (n) = (SELECT COUNT(DISTINCT(salary))
FROM emp as e2
WHERE e1.salary <= e2.salary))
미안해요 편지쓰는걸 깜빡했네요n은 당신이 원하는 n번째 급여입니다.
SELECT DISTINCT Salary
FROM emp
ORDER BY salary DESC
LIMIT 1 , 1
이 쿼리는 중복 기록 중 두 번째로 높은 급여도 제공합니다.
간단한 해결책은 쿼리에서 아래와 같습니다.
select max(salary) as salary from employees where salary<(select max(salary) from employees);
최고봉 2등으로
select max(salary) from salary where salary not in (select top 1 salary from salary order by salary desc)
최고봉 3등으로
select max(salary) from salary where salary not in (select top 2 salary from salary order by salary desc)
등등...
SELECT MAX(salary) salary
FROM tbl
WHERE salary <
(SELECT MAX(salary)
FROM tbl);
*N*번째로 높은 값을 얻으려면 이 솔루션을 사용하는 것이 좋습니다.
SELECT * FROM `employees` WHERE salary =
(SELECT DISTINCT(salary) FROM `employees`
ORDER BY salary DESC LIMIT {N-1},1);
또는 다음을 사용하여 시도할 수 있습니다.
SELECT * FROM `employees` e1 WHERE
(N-1) = (SELECT COUNT(DISTINCT(salary))
FROM `employees` e2
WHERE e1.salary < e2.salary );
두 번째로 높은 N=2, 세 번째로 높은 N=3 등입니다.
두 번째로 높은 급여를 받으려면 아래 쿼리를 사용하십시오.
SELECT salary FROM employees
ORDER BY salary DESC LIMIT 1,1;
두 번째로 높은 값을 얻는 방법:
SELECT `salary` FROM `employees` ORDER BY `salary` DESC LIMIT 1, 1;
SELECT name, salary
FROM employees
where
salary = (SELECT (salary) FROM employees GROUP BY salary DESC LIMIT 1,1)
이것을 사용해보세요 n번째 최대 급여를 받을 수 있습니다.
글을 올리기 전에 시도해 본 적이 있습니다. 잘 됩니다.
예를 들어 10번째 최대 급여 대체 한도 9,1;
mysql> select name,salary from emp group by salary desc limit n-1,1;
SELECT MIN(id) as id FROM students where id>(SELECT MIN(id) FROM students);
SELECT name, salary
FROM EMPLOYEES
WHERE salary = (
SELECT DISTINCT salary
FROM EMPLOYEES
ORDER BY salary DESC
LIMIT 1 , 1 )
with alias as
(
select name,salary,row_number() over(order by salary desc ) as rn from employees
)
select name,salary from alias where rn=n--n being the nth highest salary
SELECT username, salary
FROM tblname
GROUP by salary
ORDER by salary desc
LIMIT 0,1 ;
SELECT name,salary FROM employee
WHERE salary = (SELECT DISTINCT(salary) FROM employee ORDER BY salary DESC LIMIT 1,1) ORDER BY name
두번째, 세번째, 네번째...다음 쿼리를 사용하여 n번째로 높은 급여
SELECT MIN(salary) from employees WHERE salary IN( SELECT TOP N salary FROM employees ORDER BY salary DESC)
N을 당신의 번호로 바꾸세요.두 번째로 높은 급여의 경우 N=2, 세 번째로 높은 급여의 경우 N=3 등입니다.그래서 두번째로 높은 급여 사용을 위해
SELECT MIN(salary) from employees WHERE salary IN( SELECT TOP 2 salary FROM employees ORDER BY salary DESC)
SELECT name, salary
FROM employees
order by salary desc limit 1,1
그리고 이 쿼리가 당신 일을 할 수 있을 겁니다먼저 가장 높은 연봉자가 1등, 2등이 2등이 되도록 내림차순으로 테이블을 정리하고 있습니다.limit a,b
시작을 건너뛰는 것을 의미합니다.a
요소를 인쇄한 후 다음을 인쇄합니다.b
요소들.그래서 당신이 사용해야합니다.limit 1,1
이 경우에는
도움이 되길 바랍니다.
시도해 보기:
SELECT DISTINCT(`salary`)
FROM `employee`
ORDER BY `salary` DEC
LIMIT 1,1
SELECT SALARY
FROM (SELECT *
FROM EMPLOYEE
ORDER BY SALARY
DESC LIMIT ***2***) AS TOP_SALARY
ORDER BY SALARY ASC
LIMIT 1
select MIN(salary) from employee order by age desc limit 2;
열을 내림차순으로 정렬하여 상위 2개를 차지하고 두 번째로 높은 최소값을 반환합니다.
시도해 보기:
Proc sql;
select employee, salary
from (select * from test having salary < max(salary))
having salary = max(salary)
;
Quit;
언급URL : https://stackoverflow.com/questions/5360894/get-the-second-highest-value-in-a-mysql-table
'source' 카테고리의 다른 글
하이픈을 낙타 케이스로 변환(camelCase) (0) | 2023.09.18 |
---|---|
함수는 반환문 없이 값을 반환합니다. (0) | 2023.09.18 |
Java Apache POI 라이브러리를 사용하여 XLSX 파일에서 특정 셀의 값을 가져오는 방법 (0) | 2023.09.18 |
Google 차트 창 크기 조정/축소 (0) | 2023.09.18 |
특성 값으로 요소를 선택하려면 XPath (0) | 2023.09.18 |