programing

MySQL: 상위 n개의 최대값을 선택하시겠습니까?

padding 2023. 10. 5. 21:15
반응형

MySQL: 상위 n개의 최대값을 선택하시겠습니까?

특정 열에서 가장 큰 값을 가지는 상위 N개의 행을 반환해야 하는 쿼리에 대해 저는 정말 혼란스럽습니다.

예를 들어, 행이N-1, N, N + 1가치관이 같습니다꼭 돌아와야 함just top N아니면top N + 1줄을 지어

사용할 경우:

select *
from t
order by value desc
limit N

상위 N개의 행이 나옵니다.

사용할 경우:

select *
from t join
     (select min(value) as cutoff
      from (select value
            from t
            order by value
            limit N
           ) tlim
    ) tlim
    on t.value >= tlim;

또는 다음과 같이 좀 더 간단하게 표현할 수 있습니다.

select *
from t join
     (select value
      from t
      order by value
      limit N
    ) tlim
    on t.value = tlim.value;

다음은 개념적으로 원하는 작업이지만 MySQL에서는 작동하지 않을 수 있습니다.

select *
from t
where t.value >= ANY (select value from t order by value limit N)

다음 SQL 쿼리를 사용합니다.

SELECT salary FROM salesperson 
ORDER BY salary DESC
LIMIT 2,1

이거는 셀프조인으로 하셔야 돼요.

  1. 먼저 특정 열에 대해 가능한 상위(n) 값을 찾습니다.
  2. 기본 키를 기반으로 동일한 테이블로 연결

예를 들어 아래 샘플 테이블의 경우

CREATE TABLE `employee` (
  `ID` INT(11)   AUTO_INCREMENT PRIMARY KEY,
  `NAME` VARCHAR(50) NOT NULL,
   `SALARY` INT(11) NOT NULL , 
    JOINING_DATE TIMESTAMP  
) ENGINE=MYISAM 

INSERT INTO  employee (NAME,salary,joining_date)    VALUES('JAMES',50000,'2010-02-02'),
('GARGI',60000,'2010-02-02'),('DAN',30000,'2010-02-02'),('JOHN',10000,'2010-02-02'),('MICHEL',70000,'2010-02-02'),
('STIEVE',50000,'2010-02-02'),('CALRK',20000,'2010-02-02'),('BINNY',50000,'2010-02-02'),('SMITH',40000,'2010-02-02'),
('ROBIN',60000,'2010-02-02'),('CRIS',80000,'2010-02-02');

위의 표 데이터 설정을 통해 상위 3개의 급여를 받는 직원을 찾는 쿼리는 다음과 같습니다.

SELECT e1.* FROM 
(SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 3 ) S1
JOIN employee  e1 
ON e1.salary = s1.salary 
ORDER BY e1.salary DESC 

팁:-

상위 4개가 필요하다면 그냥 바꿉니다.LIMIT 3로.LIMIT 4

언급URL : https://stackoverflow.com/questions/19827388/mysql-select-top-n-max-values

반응형