source

MySQL 테이블에서 두 번째로 높은 값 가져오기

manycodes 2023. 9. 18. 22:34
반응형

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

반응형