oracle中如何用sql实现查出某一张表中,某个字段的值最大的10条记录

时间:2022-06-30 14:44:07
请问:
oracle中如何用sql实现:

查出某一张表中,某个字段的值最大的10条记录,
用select如何做???

oracle 有没有类似于sql server7 t_sql的 TOP 关键字??? 

谢谢大虾了!!!

24 个解决方案

#1


select * from tablename where rowno<=10 order by fdname

是不是? 呵呵

#2


rowno 应为 rownum. 


#3


oracle中有top N的功能。

select F from (select F from Table order by F) where rownum<=10

#4


nononono这回错了。难得啊。:-)

#5


呵呵
我没用过 Oracle, 就这 rownum 还是在这里看来的。

请教:rownum 是指记录的物理顺序号还是指记录在数据集中的顺序号,或者是其它? 我写的对吗?为什么?讲解一下如何?

#6


应该是数据集中的顺序号吧。我的答案可是oracle的内部资料里来的。而且我也试过,错不了。
你这样只是把前十个选出来再排序。
帮我看看我的问题。分给你留着呢!

#7


在 sql server中可以这样实现:
select top 10 * from userinfo order by user_id desc

请问,在oracle中如何实现呢???????

#8


假设如下:
表名: t_Salary
字段: Emp_no  人员编号,
Amount 收入
数据库 Oracle8 or later

Select * from t_Salary aa,
(Select a.Emp_no
From t_Salary a,t_Salary b
Where a.Amount<=b.Amount
Group   by a.Emp_no
Having Count(b.Emp_no)<=10) bb
where aa.Emp_no = bb.Emp_no
order by aa.Amount desc

#9


tojamex:
我的用法就是oracle的呀。我正在用oracle,试过,没错的。

#10


是oracle8i

#11


to Richter:
我用你的语句试了几次,每一次都已死机告终,不知您是过没有???

#12


to zheng:
我用你的语句试了一下:
select F from (select F from Table order by F) where rownum<=10 

它报语法错误!!! 我用的是oracle 8 ,不是8i的, 难道不支持???

还有别的办法吗?

#13


我试过:以下是测试Sql,在Oracle8i下试。
Create table t_S_Salary(
Emp_no varchar(10),
Amount number(8)
)
/
Insert into t_S_Salary
Values('00001',1)
/
Insert into t_S_Salary
Values('00002',2)
/
Insert into t_S_Salary
Values('00003',3)
/
Insert into t_S_Salary
Values('00004',4)
/
Insert into t_S_Salary
Values('00005',5)
/
Insert into t_S_Salary
Values('00006',6)
/
Insert into t_S_Salary
Values('00007',7)
/
Insert into t_S_Salary
Values('00008',8)
/
Insert into t_S_Salary
Values('00009',9)
/
Insert into t_S_Salary
Values('00010',10)
/
Insert into t_S_Salary
Values('00011',11)
/
Insert into t_S_Salary
Values('00012',12)
/
Insert into t_S_Salary
Values('00013',13)
/
Insert into t_S_Salary
Values('00014',14)
/
Insert into t_S_Salary
Values('00015',15)
/

Select aa.Emp_no,aa.Amount
 from  t_S_Salary aa,
(Select a.Emp_no
From t_S_Salary a,t_S_Salary b
Where a.Amount<=b.Amount
Group   by a.Emp_no
Having Count(b.Emp_no)<=10) bb
where aa.Emp_no = bb.Emp_no
order by aa.Amount desc
/
Drop table t_S_Salary
/
赚点分太辛苦了,你赶紧给点分吧。

#14


如果oracle8不支持我的用法。我就爱莫能助了。8i倒是可以的。

#15


select F from (select F from Table order by F) a(这里应加一个别名) where rownum<=10 

#16


select F from Table order by F desc  where rownum<=10;

#17


这条语句一定行:
select column from 
(select * from table_name order by column desc)
where rownum <= 10;

#18


谢谢Richter,我一定会给你分的,不过我发现了一个错误,当表的内容如下时:

EMP_NO     AMOUNT    
---------- ----------
00001               1
00002               2
00003               3
00004               4
00005               5
00006               6
00007               7
00008               8
00009               9
00010              10
00014             225
00018              22
00019              22
00020               6
00021               6
00022              60
00023              60
00013               5
00024              60
00025              60
00026             225
00027               2
00028               2
00029             200
00030              10
00031              10
00033              10
00032              11
00035              11

你的语句返回的结果如下:
EMP_NO     AMOUNT    
---------- ----------
00014             225
00026             225
00029             200
00022              60
00023              60
00024              60
00025              60
00018              22
00019              22
已选择9行。

该如何解决????
请指教!!!

to:zheng
你的语句在oracle 8中报错如下:
select * from (select * from t_s_salary order by amount) asd where rownum<=10 
                                        *
ORA-00907: ?????
好像是不支持order by amount这句话

to wwsccd:
您的我试了,也不行,同样报错: ORA-00907

#19


我觉得nononono的方法没错

#20


人气真旺!
我使用的为Oracle 8i。
用Richter的方法改进如下即可:
Select aa.Emp_no,aa.Amount
  from t_S_Salary aa,
      (Select a.Emp_no
         From t_S_Salary a,t_S_Salary b
        Where a.Amount<=b.Amount
        Group  by a.Emp_no
       Having Count(b.Emp_no)<= 11 ) bb
 where aa.Emp_no = bb.Emp_no
   and rownum <= 10
 order by aa.Amount desc
 但在amount为22的员工有3位时,你只能将11继续加大。
 当然还要考虑amount大于22员工数!
 最简省的方法,将11改为1000或更大。
 此种方法效率...

我推荐一种方法。
1、创建视图
create view v_s_salary as
select emp_no,sum(amount) total
  from t_s_salary
 group by emp_no
 order by sum(amount) desc;
2、
select * from v_s_salary 
 where rownum <= 10;

#21


应该给我加分!

#22


在Oracle 8i中,可以这样写:
Select 字段 From (Select 字段 From 表 Where Nvl(字段,0)<>0 Order by 字段 Desc) Where Rownum<=10
在8.0.5及以下版本中不能这伴写(子查询中的Order by)。
不过只用Select应该有办法,我想想先。

#23


谢谢大家!!其他人还有高见吗?
没有就给分了!

#24


如果你要按 table_name 表中 ColName 字段排序,这条语句一定行:
select ColName from (select * from table_name order by ColNamedesc)
where rownum <= 10;

#1


select * from tablename where rowno<=10 order by fdname

是不是? 呵呵

#2


rowno 应为 rownum. 


#3


oracle中有top N的功能。

select F from (select F from Table order by F) where rownum<=10

#4


nononono这回错了。难得啊。:-)

#5


呵呵
我没用过 Oracle, 就这 rownum 还是在这里看来的。

请教:rownum 是指记录的物理顺序号还是指记录在数据集中的顺序号,或者是其它? 我写的对吗?为什么?讲解一下如何?

#6


应该是数据集中的顺序号吧。我的答案可是oracle的内部资料里来的。而且我也试过,错不了。
你这样只是把前十个选出来再排序。
帮我看看我的问题。分给你留着呢!

#7


在 sql server中可以这样实现:
select top 10 * from userinfo order by user_id desc

请问,在oracle中如何实现呢???????

#8


假设如下:
表名: t_Salary
字段: Emp_no  人员编号,
Amount 收入
数据库 Oracle8 or later

Select * from t_Salary aa,
(Select a.Emp_no
From t_Salary a,t_Salary b
Where a.Amount<=b.Amount
Group   by a.Emp_no
Having Count(b.Emp_no)<=10) bb
where aa.Emp_no = bb.Emp_no
order by aa.Amount desc

#9


tojamex:
我的用法就是oracle的呀。我正在用oracle,试过,没错的。

#10


是oracle8i

#11


to Richter:
我用你的语句试了几次,每一次都已死机告终,不知您是过没有???

#12


to zheng:
我用你的语句试了一下:
select F from (select F from Table order by F) where rownum<=10 

它报语法错误!!! 我用的是oracle 8 ,不是8i的, 难道不支持???

还有别的办法吗?

#13


我试过:以下是测试Sql,在Oracle8i下试。
Create table t_S_Salary(
Emp_no varchar(10),
Amount number(8)
)
/
Insert into t_S_Salary
Values('00001',1)
/
Insert into t_S_Salary
Values('00002',2)
/
Insert into t_S_Salary
Values('00003',3)
/
Insert into t_S_Salary
Values('00004',4)
/
Insert into t_S_Salary
Values('00005',5)
/
Insert into t_S_Salary
Values('00006',6)
/
Insert into t_S_Salary
Values('00007',7)
/
Insert into t_S_Salary
Values('00008',8)
/
Insert into t_S_Salary
Values('00009',9)
/
Insert into t_S_Salary
Values('00010',10)
/
Insert into t_S_Salary
Values('00011',11)
/
Insert into t_S_Salary
Values('00012',12)
/
Insert into t_S_Salary
Values('00013',13)
/
Insert into t_S_Salary
Values('00014',14)
/
Insert into t_S_Salary
Values('00015',15)
/

Select aa.Emp_no,aa.Amount
 from  t_S_Salary aa,
(Select a.Emp_no
From t_S_Salary a,t_S_Salary b
Where a.Amount<=b.Amount
Group   by a.Emp_no
Having Count(b.Emp_no)<=10) bb
where aa.Emp_no = bb.Emp_no
order by aa.Amount desc
/
Drop table t_S_Salary
/
赚点分太辛苦了,你赶紧给点分吧。

#14


如果oracle8不支持我的用法。我就爱莫能助了。8i倒是可以的。

#15


select F from (select F from Table order by F) a(这里应加一个别名) where rownum<=10 

#16


select F from Table order by F desc  where rownum<=10;

#17


这条语句一定行:
select column from 
(select * from table_name order by column desc)
where rownum <= 10;

#18


谢谢Richter,我一定会给你分的,不过我发现了一个错误,当表的内容如下时:

EMP_NO     AMOUNT    
---------- ----------
00001               1
00002               2
00003               3
00004               4
00005               5
00006               6
00007               7
00008               8
00009               9
00010              10
00014             225
00018              22
00019              22
00020               6
00021               6
00022              60
00023              60
00013               5
00024              60
00025              60
00026             225
00027               2
00028               2
00029             200
00030              10
00031              10
00033              10
00032              11
00035              11

你的语句返回的结果如下:
EMP_NO     AMOUNT    
---------- ----------
00014             225
00026             225
00029             200
00022              60
00023              60
00024              60
00025              60
00018              22
00019              22
已选择9行。

该如何解决????
请指教!!!

to:zheng
你的语句在oracle 8中报错如下:
select * from (select * from t_s_salary order by amount) asd where rownum<=10 
                                        *
ORA-00907: ?????
好像是不支持order by amount这句话

to wwsccd:
您的我试了,也不行,同样报错: ORA-00907

#19


我觉得nononono的方法没错

#20


人气真旺!
我使用的为Oracle 8i。
用Richter的方法改进如下即可:
Select aa.Emp_no,aa.Amount
  from t_S_Salary aa,
      (Select a.Emp_no
         From t_S_Salary a,t_S_Salary b
        Where a.Amount<=b.Amount
        Group  by a.Emp_no
       Having Count(b.Emp_no)<= 11 ) bb
 where aa.Emp_no = bb.Emp_no
   and rownum <= 10
 order by aa.Amount desc
 但在amount为22的员工有3位时,你只能将11继续加大。
 当然还要考虑amount大于22员工数!
 最简省的方法,将11改为1000或更大。
 此种方法效率...

我推荐一种方法。
1、创建视图
create view v_s_salary as
select emp_no,sum(amount) total
  from t_s_salary
 group by emp_no
 order by sum(amount) desc;
2、
select * from v_s_salary 
 where rownum <= 10;

#21


应该给我加分!

#22


在Oracle 8i中,可以这样写:
Select 字段 From (Select 字段 From 表 Where Nvl(字段,0)<>0 Order by 字段 Desc) Where Rownum<=10
在8.0.5及以下版本中不能这伴写(子查询中的Order by)。
不过只用Select应该有办法,我想想先。

#23


谢谢大家!!其他人还有高见吗?
没有就给分了!

#24


如果你要按 table_name 表中 ColName 字段排序,这条语句一定行:
select ColName from (select * from table_name order by ColNamedesc)
where rownum <= 10;