Sql 如何在Oracle中获得团队中的第三名
我有一个表,假设它有3个字段,它们是f1,f2,f3,现在我想要一个SQL按f1和f2分组,然后按ASC或DESC顺序对每个组中的f3进行排序,并在f3中查询出每个组中的第三个字段,如何编写SQL查询。例如:Sql 如何在Oracle中获得团队中的第三名,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我有一个表,假设它有3个字段,它们是f1,f2,f3,现在我想要一个SQL按f1和f2分组,然后按ASC或DESC顺序对每个组中的f3进行排序,并在f3中查询出每个组中的第三个字段,如何编写SQL查询。例如: f1 f2 f3 A A 2 A A 3 A A 1 A B 4 A B 6 A B 2 按各组ASC顺序,查询结果如下,取第三个: A A 3 A B
f1 f2 f3
A A 2
A A 3
A A 1
A B 4
A B 6
A B 2
按各组ASC顺序,查询结果如下,取第三个:
A A 3
A B 6
按照每组中的描述顺序,查询结果应如下所示,获取第三个:
A A 1
A B 2
有没有一种方法可以在Oracle中查询该表并获得上述结果?您可以尝试使用
Rank
窗口函数来创建它
SELECT f1, f2, f3
FROM
(
SELECT t1.*,
RANK() OVER (PARTITION BY f1, f2 ORDER BY f3 ASC) AS rn
FROM T t1
) t1
WHERE rn = 3
您可以尝试使用
Rank
window函数进行设置
SELECT f1, f2, f3
FROM
(
SELECT t1.*,
RANK() OVER (PARTITION BY f1, f2 ORDER BY f3 ASC) AS rn
FROM T t1
) t1
WHERE rn = 3
您可以使用
row\u number
窗口函数按升序或降序对f3
(每组f1
和f2
)的每个值进行编号,然后查询第三个值:
SELECT f1, f2, f3
FROM (SELECT f1,
f2,
f3,
ROW_NUMBER() OVER (PARTITION BY f1, f2 ORDER BY f3 ASC /* or desc */) AS rn
FROM mytable) t
WHERE rn = 3
您可以使用
row\u number
窗口函数按升序或降序对f3
(每组f1
和f2
)的每个值进行编号,然后查询第三个值:
SELECT f1, f2, f3
FROM (SELECT f1,
f2,
f3,
ROW_NUMBER() OVER (PARTITION BY f1, f2 ORDER BY f3 ASC /* or desc */) AS rn
FROM mytable) t
WHERE rn = 3
这将有助于:
select * from (select f1,f2,f3,rank() over (partition by f1,f2 order by f3)
as rank
from Table1 ) where rank=3;
这将有助于:
select * from (select f1,f2,f3,rank() over (partition by f1,f2 order by f3)
as rank
from Table1 ) where rank=3;