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
select F from (select F from Table order by F) where rownum<=10
#4
nononono这回错了。难得啊。:-)
#5
呵呵
我没用过 Oracle, 就这 rownum 还是在这里看来的。
请教:rownum 是指记录的物理顺序号还是指记录在数据集中的顺序号,或者是其它? 我写的对吗?为什么?讲解一下如何?
我没用过 Oracle, 就这 rownum 还是在这里看来的。
请教:rownum 是指记录的物理顺序号还是指记录在数据集中的顺序号,或者是其它? 我写的对吗?为什么?讲解一下如何?
#6
应该是数据集中的顺序号吧。我的答案可是oracle的内部资料里来的。而且我也试过,错不了。
你这样只是把前十个选出来再排序。
帮我看看我的问题。分给你留着呢!
你这样只是把前十个选出来再排序。
帮我看看我的问题。分给你留着呢!
#7
在 sql server中可以这样实现:
select top 10 * from userinfo order by user_id desc
请问,在oracle中如何实现呢???????
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
表名: 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,试过,没错的。
我的用法就是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的, 难道不支持???
还有别的办法吗?
我用你的语句试了一下:
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
/
赚点分太辛苦了,你赶紧给点分吧。
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;
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
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;
我使用的为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应该有办法,我想想先。
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;
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
select F from (select F from Table order by F) where rownum<=10
#4
nononono这回错了。难得啊。:-)
#5
呵呵
我没用过 Oracle, 就这 rownum 还是在这里看来的。
请教:rownum 是指记录的物理顺序号还是指记录在数据集中的顺序号,或者是其它? 我写的对吗?为什么?讲解一下如何?
我没用过 Oracle, 就这 rownum 还是在这里看来的。
请教:rownum 是指记录的物理顺序号还是指记录在数据集中的顺序号,或者是其它? 我写的对吗?为什么?讲解一下如何?
#6
应该是数据集中的顺序号吧。我的答案可是oracle的内部资料里来的。而且我也试过,错不了。
你这样只是把前十个选出来再排序。
帮我看看我的问题。分给你留着呢!
你这样只是把前十个选出来再排序。
帮我看看我的问题。分给你留着呢!
#7
在 sql server中可以这样实现:
select top 10 * from userinfo order by user_id desc
请问,在oracle中如何实现呢???????
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
表名: 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,试过,没错的。
我的用法就是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的, 难道不支持???
还有别的办法吗?
我用你的语句试了一下:
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
/
赚点分太辛苦了,你赶紧给点分吧。
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;
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
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;
我使用的为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应该有办法,我想想先。
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;
select ColName from (select * from table_name order by ColNamedesc)
where rownum <= 10;