如何在 Oracle 的组中获得第三个 [重复]
Posted
技术标签:
【中文标题】如何在 Oracle 的组中获得第三个 [重复]【英文标题】:How to get third one in a group in Oracle [duplicate] 【发布时间】:2018-12-08 07:16:09 【问题描述】:我有一个表,假设它有 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 6
按DESC顺序在每组中,查询结果应该是这样的,得到第三个:
A A 1
A B 2
有没有办法在 Oracle 中查询表并得到类似上面的结果?
【问题讨论】:
【参考方案1】:您可以使用row_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
【讨论】:
【参考方案2】:你可以尝试使用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
【讨论】:
【参考方案3】:这将起作用:
select * from (select f1,f2,f3,rank() over (partition by f1,f2 order by f3)
as rank
from Table1 ) where rank=3;
【讨论】:
以上是关于如何在 Oracle 的组中获得第三个 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如果它出现在MYSQL中的组中,如何为每个值返回'true / false'?
如何在 SQL Server 中按日期列排序的组中对列进行排名