如何获取一个查询的前 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
我有这个查询:
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 |