oracle中排名,sql - 如何在Oracle中排名第一?

sql - 如何在Oracle中排名第一?

我该怎么做?

select top 1 Fname from MyTbl

在Oracle 11g中?

9个解决方案

212 votes

如果您只想要第一个选定的行,您可以:

select fname from MyTbl where rownum = 1

您还可以使用分析函数来排序并获取顶部x:

select max(fname) over (rank() order by some_factor) from MyTbl

mcpeterson answered 2019-03-09T02:22:46Z

137 votes

SELECT *

FROM (SELECT * FROM MyTbl ORDER BY Fname )

WHERE ROWNUM = 1;

Damian Leszczyński - Vash answered 2019-03-09T02:23:07Z

22 votes

使用Oracle 12c(2013年6月),您可以像以下一样使用它。

SELECT * FROM MYTABLE

--ORDER BY COLUMNNAME -OPTIONAL

OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY

MSK answered 2019-03-09T02:23:33Z

9 votes

您可以在子查询中使用TOP N和NAME子句,并使用此列代替PARTITION BY。这可以逐步解释。

请参见下表,其中包含两列TOP N和NAME。

851e9d2c347e67883d8b1fbe9440504b.png

如果您只需要前两个日期而不管TOP N,您可以使用以下查询。 逻辑已写入查询内部

-- The number of records can be specified in WHERE clause

SELECT RNO,NAME,DT_CREATED

FROM

(

-- Generates numbers in a column in sequence in the order of date

SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,

NAME,DT_CREATED

FROM DEMOTOP

)TAB

WHERE RNO<3;

结果

de916d88a2f0117aae8c61db4f4061d2.png

在某些情况下,我们需要分别选择TOP N每个NAME的结果。在这种情况下我们可以在子查询中使用PARTITION BY和ORDER BY子句。 请参阅以下查询。

-- The number of records can be specified in WHERE clause

SELECT RNO,NAME,DT_CREATED

FROM

(

--Generates numbers in a column in sequence in the order of date for each NAME

SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,

NAME,DT_CREATED

FROM DEMOTOP

)TAB

WHERE RNO<3;

结果

be4c17163e7ca6c4c2a44356a746faf1.png

Sarath Avanavu answered 2019-03-09T02:24:30Z

7 votes

你可以做点什么

SELECT *

FROM (SELECT Fname FROM MyTbl ORDER BY Fname )

WHERE rownum = 1;

您也可以使用分析函数RANK和/或DENSE_RANK,但ROWNUM可能是最简单的。

Suman answered 2019-03-09T02:25:06Z

6 votes

select * from (

select FName from MyTbl

)

where rownum <= 1;

a'r answered 2019-03-09T02:25:24Z

5 votes

使用:

SELECT x.*

FROM (SELECT fname

FROM MyTbl) x

WHERE ROWNUM = 1

如果使用Oracle9i +,您可以考虑使用像ROW_NUMBER()这样的分析函数,但它们的性能不如ROWNUM。

OMG Ponies answered 2019-03-09T02:25:56Z

3 votes

从表中选择第一行并从表中选择一行是两个不同的任务,需要不同的查询。 有很多可能的方法可以做到这一点。 其中四个是:

第一

select max(Fname) from MyTbl;

第二

select min(Fname) from MyTbl;

第三

select Fname from MyTbl where rownum = 1;

第四

select max(Fname) from MyTbl where rowid=(select max(rowid) from MyTbl)

Vikas Hardia answered 2019-03-09T02:26:51Z

2 votes

我遇到了同样的问题,我可以用这个解决方案解决这个问题:

select a.*, rownum

from (select Fname from MyTbl order by Fname DESC) a

where

rownum = 1

您可以在订购结果之前将第一个值放在首位。

祝好运

user2607028 answered 2019-03-09T02:27:37Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值