반응형
각 그룹에 대한 상위 결과 가져오기(Oracle)
오라클 쿼리에서 여러 그룹에 대한 N개의 결과를 어떻게 얻을 수 있습니까?
예를 들어, 다음 표가 주어집니다.
|--------+------------+------------|
| emp_id | name | occupation |
|--------+------------+------------|
| 1 | John Smith | Accountant |
| 2 | Jane Doe | Engineer |
| 3 | Jack Black | Funnyman |
|--------+------------+------------|
더 많은 직업을 가진 더 많은 행이 있습니다.각 직종별로 3명의 직원을 채용하고 싶습니다.
하위 쿼리를 사용하지 않고 이 작업을 수행할 수 있는 방법이 있습니까?
현재 Oracle 인스턴스를 사용할 수 없기 때문에 테스트하지 않았습니다.
select *
from (select emp_id, name, occupation,
rank() over ( partition by occupation order by emp_id) rank
from employee)
where rank <= 3
다음은 순위가 작동하는 방식에 대한 링크입니다. http://www.psoug.org/reference/rank.html
이렇게 하면 원하는 것을 얻을 수 있으며 TOP N 또는 RANK()와 같은 벤더별 SQL 기능을 사용하지 않습니다.
SELECT MAX(e.name) AS name, MAX(e.occupation) AS occupation
FROM emp e
LEFT OUTER JOIN emp e2
ON (e.occupation = e2.occupation AND e.emp_id <= e2.emp_id)
GROUP BY e.emp_id
HAVING COUNT(*) <= 3
ORDER BY occupation;
이 예제에서는 직업별로 가장 낮은 emp_id 값을 가진 세 명의 직원에게 제공합니다.불평등 비교에 사용되는 속성을 변경하여 상위 직원에게 이름 또는 기타 이름을 제공할 수 있습니다.
순위에 RowNum 추가:
select * from
(select emp_id, name, occupation,rank() over ( partition by occupation order by emp_id,RowNum) rank
from employee)
where rank <= 3
SQL Server에서 테스트했습니다(서브쿼리 사용)
select emp_id, name, occupation
from employees t1
where emp_id IN (select top 3 emp_id from employees t2 where t2.occupation = t1.occupation)
필요에 따라 하위 쿼리에서 주문을 수행합니다.
여기가 효율적인지는 잘 모르겠지만, 출발점이 될 수도 있나요?
select *
from people p1
join people p2
on p1.occupation = p2.occupation
join people p3
on p1.occupation = p3.occupation
and p2.occupation = p3.occupation
where p1.emp_id != p2.emp_id
and p1.emp_id != p3.emp_id
이렇게 하면 동일한 직업에 종사하는 3명의 직원이 모두 포함된 행이 제공됩니다.불행히도, 그것은 당신에게 그것들의 모든 조합을 제공할 것입니다.
이것 좀 깎아주실 수 있나요?
언급URL : https://stackoverflow.com/questions/134958/get-top-results-for-each-group-in-oracle
반응형
'bestsource' 카테고리의 다른 글
그의 이름과 열 참조를 사용하여 Excel 2010 테이블을 루프하려면 어떻게 해야 합니까? (0) | 2023.06.28 |
---|---|
오라클에서 쉼표로 구분된 값을 행으로 변환하는 방법은 무엇입니까? (0) | 2023.06.28 |
새로운 마이그레이션의 중복된 변경 사항 (0) | 2023.06.23 |
ASP.Net MVC에서 확인란 목록을 만드는 방법 (0) | 2023.06.23 |
기본 쿼리 및 하위 쿼리에 동일한 별칭 사용 (0) | 2023.06.23 |