반응형
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
이거는 셀프조인으로 하셔야 돼요.
- 먼저 특정 열에 대해 가능한 상위(n) 값을 찾습니다.
- 기본 키를 기반으로 동일한 테이블로 연결
예를 들어 아래 샘플 테이블의 경우
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
반응형
'programing' 카테고리의 다른 글
Python으로 개체 목록에서 중복 제거 (0) | 2023.10.05 |
---|---|
C 자동 플러시(각 쓰기 후 플러시 stdout)에 해당합니까? (0) | 2023.10.05 |
각도가 있는 분리된 DOM 트리JS/jQuery (0) | 2023.10.05 |
SSH를 통해 로컬 컴퓨터로 mysqdump (0) | 2023.10.05 |
레일에서 angularjs 및 루비를 사용하는 동안 알 수 없는 공급자 e-provider 오류가 발생했습니다. (0) | 2023.10.05 |