如何获取一个查询的前 5 条记录以用于另一个查询

How to get the first 5 records f a query to use in another query

我有这个查询:

select name, score from tb
group by name, score
order by score desc
limit 5

输出为:

name1   90
name2   85
name3   70
name4   50 
name5   30

现在我想做同样的查询,但使用名称来执行另一个查询。我需要知道如何按照它们在第一个查询中出现的顺序“调用”2ns 最高分名称、第 3、第 4 和第 5 个名称。

像这样:

with 5_top as(  
select name, score from tb
    group by name, score
    order by score desc
    limit 5)

select <2nd name_here> 来自 5_top

所以从第一个查询我知道 name2 是第二高的分数所以在下一个查询中我可以只使用 where name = name2 但是如果 name2 下周下降到第三位我的查询将失败.

您可以使用row_number() window函数来确定位置。请注意它的明确顺序:

WITH dataset (name, score) AS (
    VALUES ('name1', 90),
        ('name2', 85),
        ('name3', 70),
        ('name4', 50),
        ('name5', 30)
)
select * 
from (
        select *, row_number() over (order by score desc) rnk
        from dataset
    )
where rnk > 1

输出:

name score rnk
name2 85 2
name3 70 3
name4 50 4
name5 30 5