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

jamex 2000-12-11 06:09:00
请问:
oracle中如何用sql实现:

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

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

谢谢大虾了!!!
...全文
5503 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamex 2000-12-14
  • 打赏
  • 举报
回复
谢谢大家!!其他人还有高见吗?
没有就给分了!
秋天去看你 2000-12-14
  • 打赏
  • 举报
回复
如果你要按 table_name 表中 ColName 字段排序,这条语句一定行:
select ColName from (select * from table_name order by ColNamedesc)
where rownum <= 10;
jamex 2000-12-13
  • 打赏
  • 举报
回复
谢谢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
水之手 2000-12-13
  • 打赏
  • 举报
回复
在Oracle 8i中,可以这样写:
Select 字段 From (Select 字段 From 表 Where Nvl(字段,0)<>0 Order by 字段 Desc) Where Rownum<=10
在8.0.5及以下版本中不能这伴写(子查询中的Order by)。
不过只用Select应该有办法,我想想先。
wwsccd 2000-12-13
  • 打赏
  • 举报
回复
应该给我加分!
wwsccd 2000-12-13
  • 打赏
  • 举报
回复
人气真旺!
我使用的为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;
e_cat 2000-12-13
  • 打赏
  • 举报
回复
我觉得nononono的方法没错
zheng 2000-12-12
  • 打赏
  • 举报
回复
是oracle8i
zheng 2000-12-12
  • 打赏
  • 举报
回复
tojamex:
我的用法就是oracle的呀。我正在用oracle,试过,没错的。
Richter 2000-12-12
  • 打赏
  • 举报
回复
假设如下:
表名: 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

秋天去看你 2000-12-12
  • 打赏
  • 举报
回复
这条语句一定行:
select column from
(select * from table_name order by column desc)
where rownum <= 10;
jamex 2000-12-12
  • 打赏
  • 举报
回复
在 sql server中可以这样实现:
select top 10 * from userinfo order by user_id desc

请问,在oracle中如何实现呢???????
rabbit 2000-12-12
  • 打赏
  • 举报
回复
select F from Table order by F desc where rownum<=10;
wwsccd 2000-12-12
  • 打赏
  • 举报
回复
select F from (select F from Table order by F) a(这里应加一个别名) where rownum<=10
zheng 2000-12-12
  • 打赏
  • 举报
回复
如果oracle8不支持我的用法。我就爱莫能助了。8i倒是可以的。
Richter 2000-12-12
  • 打赏
  • 举报
回复
我试过:以下是测试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
/
赚点分太辛苦了,你赶紧给点分吧。
jamex 2000-12-12
  • 打赏
  • 举报
回复
to zheng:
我用你的语句试了一下:
select F from (select F from Table order by F) where rownum<=10

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

还有别的办法吗?
jamex 2000-12-12
  • 打赏
  • 举报
回复
to Richter:
我用你的语句试了几次,每一次都已死机告终,不知您是过没有???
zheng 2000-12-11
  • 打赏
  • 举报
回复
应该是数据集中的顺序号吧。我的答案可是oracle的内部资料里来的。而且我也试过,错不了。
你这样只是把前十个选出来再排序。
帮我看看我的问题。分给你留着呢!
nononono 2000-12-11
  • 打赏
  • 举报
回复
呵呵
我没用过 Oracle, 就这 rownum 还是在这里看来的。

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

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧