让我们说我有这样简单的数据库:
People
name age
Max 25
Mike 15
Lea 22
Jenny 75
Juliet 12
Kenny 10
Mark 44
我想通过使用JOIN和People表本身从那里选择N最老的人。我试图以这种方式加入他们
People p1 JOIN People p2 ON p1.age < p2.age
能够在p2中计算p2中与p1中特定一个人相比较年长的人数,然后根据此数字过滤结果,但我不知道如何计算它以及我是否加入这些表格是正确的:)
对于N = 4,预期结果为:
name age
Jenny 75
Mark 44
Max 25
Lea 22
答案 0 :(得分:1)
我认为你的意思是:
SELECT t.name,t.age FROM (
SELECT p1.name,p1.age,count(*) as cnt FROM People p1
JOIN People p2ORDER ONBY p1.age < p2.age
GROUP BY p1.name,p1.age) t
WHERE t.cnt <= N
但是没有必要,你可以使用ORACLE的rownum
SELECT * FROM (
SELECT * FROM People p1
ORDER BY p1.age DESC)
WHERE ROWNUM <= N
答案 1 :(得分:1)
较新的Oracle版本支持FETCH FIRST
:
select *
from people
order by age desc
fetch first 4 rows only
您还可以尝试:fetch first 4 rows with ties
答案 2 :(得分:0)
您不需要加入,只需对嵌套查询进行排序:
select *
from (
select *
from people
order by age desc
)
where rownum <= 5
答案 3 :(得分:0)
无需使用连接,只需执行
select * from
(select p1.name,p1.age, row_number() over (order by p1.age desc) order_n from people)
where order_n <=N
(如果我正确地解释了你的问题)