oracle中,还是不甚明白order by和group by的用法

oracle中,还是不甚明白order by和group by的用法,第1张

我甚是理解你 我开始也很不明白

order by是排序

如order by ID 表示按ID 升序排列

order by ID,NUM 表示优先按照ID排序 ID相同的再按NUM排序 这个意思

group by 是分组

首先用group by 的前提是你的select里边用了聚合函数如sum(),avg(),min(),max()

没有聚合函数用不了group by会报错

其次 出现在select里边的除聚合函数以外的所有字段 都必须作为group by的条件

出现在group by中的字段可以不select出来

也就是说 select中的字段必须出现在group by中 group by中的分组条件不一定出现在select中

你的例子中 select 表示所有字段 这个时候必须所有字段group by 你只group by deptno肯定报错

再次 group by 的顺序类似order by

如 group by A,B,C,D责先按A分组 再按BCD这个顺序分组

group by条件越多分组越细 也就是说 假如A是学校 B是学院 C是专业 D是班级 那最后group by的结果是按照有多少个不同的班级分组 按照最细致的分组

因为我对这个感触颇深希望我的理解对你有帮助

对三个字段建立索引

create index Stuname on student(name);

create index Stusex on student(sex);

create index Stugrade on student(grade);

注意的问题,考虑是不是要建立唯一索引(unique),如果有学号的话,可以考虑建立唯一索引引。

再就是对经常查询,但又相对稳定的可以建立聚簇索引,提高查询效率

首先,来构造一些数据

drop table test;

create table test

(

       name varchar2(10),

       account number(5)

);

insert into test values ('张三','5');

insert into test values ('王五','10');

insert into test values ('小二','10');

insert into test values ('李四','20');

insert into test values ('小三','40');

insert into test values ('小四','50');

insert into test values ('小五','90');

insert into test values ('小六','90');

insert into test values ('小七','90');

commit;

下面来看一下一些方式的排名结果:

1  select     t,dense_rank() over(order by taccount asc)   排名   from test t;

2 select   t,dense_rank() over(order by taccount desc) 排名    from  test t;

3 select t,rank() over(order by taccount asc) 排名 from test t;

4 select t,rank() over(order by taccount desc) 排名 from test t;

oracle如何对数字字母字符混合的字段排序

可以通过 “order by 字段名 asc (desc)” 命令进行排序。sql:select from tablename order by id DESC;用 DESC 表示按倒序排序(即:从大到小排序) ,用 ACS 表示按正序排序(即:从小到大排序)。

单引号用两个就可以了:

SQL> select '''' from dual;

'

-

'

&是SQLPLUS里才用到的特殊字符,做宏替换用的,编程语言应该不受影响。如果你用不到它,可以干脆禁掉:

SQL> show define

define "&" (hex 26)

SQL> set define off

SQL> select '&aaaaa' from dual;

'&AAAA

------

&aaaaa

你实在都要用就用chr(38)

一、

伪列就像Oracle中的一个表列,但实际上它并未存储在表中。伪列可以从表中查询,但是不能插入、更新或删除它们的值。常用的伪列:rowid和rownum。

Rowid:数据库中的每一行都有一个行地址,Rowid伪列返回该行地址。可以使用Rowid值来定位表中的一行。通常情况下,Rowid值可以唯一地标识数据库中的一行。

Rowid伪列有以下重要用途:

1)能以最快的方式访问表中的一行;

2)能显示表的行是如何存储的。

3)可以作为表中行的唯一标识。

如:SQL> select rowid,ename from emp;

Rownum:对于一个查询返回的每一行,Rownum伪列返回一个数值代表的次序。返回的第一行的Rownum值为1,第二行的Rownum值为2,依此类推。通过使用Rownum伪列,用户可以限制查询返回的行数。

如:SQL>select from emp where rownum<11; 从EMP表中提取10条记录

二、

oracle中不支持select top n from tablename 查询,但是通过 order by 和 rownum 组合可以实现此功能。例如:SELECT 列名1...列名n FROM

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)

WHERE ROWNUM <= N(抽出记录数)

ORDER BY ROWNUM ASC

以上就是关于oracle中,还是不甚明白order by和group by的用法全部的内容,包括:oracle中,还是不甚明白order by和group by的用法、oracle 怎样添加索引、oracle数据库中怎样依据成绩实现排名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10127895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存