本篇文章给大家谈谈oracle排序,以及oracle排序指定某些值排在前对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Oracle分析函数之排序 row_number() & rank()
- 2、Oracle中的中文排序方式
- 3、oracle里面怎么多个字段分组排序
- 4、oracle 怎么指定排序?
- 5、如何实现Oracle的自定义排序
- 6、oracle中不用ORDER BY怎么实现排序?
Oracle分析函数之排序 row_number() & rank()
对于排序分析,应用的业务分析场景很多,例如所有销售大区的TOP5、按具体规则对数据集进行重新排序编号等,这些业务场景采用分析函数中排序函数,将很方便简谨滚碰单。
当前常用的排序类分析函数包括:row_number()、rank()、dense_rank(),这三个函数都可应用在排序场景中,但 又有些许不同。
特点:对分组后的排序结果进行递增编号,出现同值的也是递增处理。
rank()特点:按分组后的排序结果进行递增编号,如出现相同值则序号一致,但相邻出现的不同值序号将从rown+N开始(rown为前一个值的序号,N为祥谈前一个值相同的个数)。
dense_rank()特点:和rank()相似,按分组后的排备弊序结果进行递增编号,如出现相同值则序号一致,但相邻出现的不同值序号将从rown+1开始。
1.row_number()应用于 不区分同值排序 的业务场景;
2.rank()dense_rank()应用于 区分同值排序 的业务场景,至于用rank和dense_rank,则要看对同值排序后对序号递增方式的具体要求来定。
有了上述三个函数,对于日常公司分析大区销售排名、销售代表排名、部门费用项排名等等,将会非常的方便快捷。
Oracle中的中文排序方式
测试中文排序的数据库版本
SQL select * from v$version;
BANNER
Oracle Database g Enterprise Edition Release Production
PL/SQL Release Production
CORE Production
TNS for Linux: Version Production
NLSRTL Version Production
创建测试表
create table player (id number( ) name varchar ( ));
检查字符集配置
确认数据库字符集 american_america AL UTF
SQL select name value$ from props$;
NAME 磨掘悔 VALUE$
DICT BASE
DEFAULT_TEMP_TABLESPACE TEMP
DEFAULT_PERMANENT_TABLESPACE USERS
DEFAULT_EDITION ORA$BASE
Flashback Timestamp TimeZone GMT
TDE_MASTER_KEY_ID
DEFAULT_TBS_TYPE SMALLFILE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY 瞎正 AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS
NLS_CHARACTERSET AL UTF
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD MON RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH MI SSXFF AM
NLS_TIMESTAMP_FORMAT DD MON RR HH MI SSXFF AM
NLS_TIME_TZ_FORMAT HH MI SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD MON RR HH MI SSXFF AM TZR
NLS_DUAL_CURRENCY 散迟 $
NLS_P BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL UTF
NLS_RDBMS_VERSION
GLOBAL_DB_NAME ORA G
EXPORT_VIEWS_VERSION
WORKLOAD_CAPTURE_MODE
WORKLOAD_REPLAY_MODE
DBTIMEZONE :
rows selected
SQL
深入确认字符集
SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET
DECODE(TYPE#
DECODE(CHARSETFORM VARCHAR NVARCHAR UNKOWN )
DECODE(CHARSETFORM VARCHAR NCHAR VARYING UNKOWN )
DECODE(CHARSETFORM CHAR NCHAR UNKOWN )
DECODE(CHARSETFORM CLOB NCLOB UNKOWN )) TYPES_USED_IN
FROM SYS COL$
WHERE CHARSETFORM IN ( )
AND TYPE# IN ( );
确认操作系统字符集设置
[ora g@bj ~]$ export NLS_LANG=american_america al utf
填写测试数据
SQL insert into player values ( 下午啦 );
row created
SQL insert into player values ( 八千米死亡线 );
SQL set pagesize
SQL select * from player;
ID NAME
中文
中文拼音
笔画输入法
一
二
三
四
五
六
七
八
八
九
十
测试啊
下午啦
八千米死亡线
rows selected
SQL
开始测试 发现三个查询语句返回的结果一致
SQL select * from player order by nlssort(name NLS_SORT=SCHINESE_RADICAL_M );
ID NAME
一
十
四
七
六
五
三
笔画输入法
八
九
八
二
中文
下午啦
中文拼音
测试啊
八千米死亡线
rows selected
SQL select * from player order by nlssort(name NLS_SORT=SCHINESE_STROKE_M );
ID NAME
一
十
四
七
六
五
三
笔画输入法
八
九
八
二
中文
下午啦
中文拼音
测试啊
八千米死亡线
rows selected
SQL select * from player order by nlssort(name NLS_SORT=SCHINESE_PINYIN_M );
ID NAME
一
十
四
七
六
五
三
笔画输入法
八
九
八
二
中文
下午啦
中文拼音
测试啊
八千米死亡线
rows selected
囧 疑似碰上bug 切换到 gR 下看看
SQL select * from v$version;
BANNER
Oracle Database g Enterprise Edition Release Prod
PL/SQL Release Production
CORE Production
TNS for Linux: Version Production
NLSRTL Version Production
SQL select * from player order by nlssort(name NLS_SORT=SCHINESE_PINYIN_M );
ID NAME
八
八
八千米死亡线
笔画输入法
测试啊
二
九
六
七
三
十
四
五
下午啦
一
中文
中文拼音
rows selected
SQL select * from player order by nlssort(name NLS_SORT=SCHINESE_STROKE_M );
ID NAME
一
七
二
九
八
八
八千米死亡线
十
三
下午啦
五
中文
中文拼音
六
四
测试啊
笔画输入法
测试服务器
rows selected
SQL select * from player order by nlssort(name NLS_SORT=SCHINESE_RADICAL_M );
ID NAME
一
七
二
三
下午啦
五
中文
中文拼音
九
八
八
八千米死亡线
六
十
四
测试啊
笔画输入法
测试服务器
rows selected
SQL
这个结果似乎比较符合预期结果
NLS_SORT=SCHINESE_RADICAL_M 按照部首排序
NLS_SORT=SCHINESE_STROKE_M 按照笔画排序
lishixinzhi/Article/program/Oracle/201311/17664
[img]oracle里面怎么多个字段分组排序
分组排序用group by,若需要条件则在后面加having。
多个字段的话用order by,比如:order by a,b
order by 可以让表毕逗雹按a排序,遇到重复的再按b再排一次序,做到把想要的指亩字段与其他无关字段分开比较手帆。
oracle 怎么指定排序?
可以通过 “order by 字段散丛宏名 asc (desc)”郑余 命令进行排序。
sql:select * from tablename order by id DESC;
用 DESC 表示按倒序排序(即冲册:从大到小排序) ,用 ACS 表示按正序排序(即:从小到大排序)。
如何实现Oracle的自定义排序
1
2
3
4
5
6
7
8
9
10
11
普通排序SQL是这样的:SELECT NAME FROM TABLE ORDER BY NAME;这时候我们需要按照自己定义的NAME的排序规则进行排序,如按照某个字典ARRAY进行排序,就需要用个临时表侍蠢来完成如建立表:C_SORT_Tcreatetable C_SORT_T
(
SORT_ID NUMBER(10),
SORT_NAME VARCHAR2(20),
SORT_SEQ NUMBER(10)
)然后把原有的SQL联合排序表进行查询,然后用SORT_SEQ排序就可以了。 如果是SORT array是不固定,而是在排序前传入SQL?该怎么办?如果排序的array不大的话,可以用DECODE来老谈毕达到要求,如下:SELECT NAME FROM TABLE排序:SELECT NAME,DECODE(NAME,"ARRAY[0]",1,"ARRAY[1]",2,....,9999) SEQ FROM TABLE ORDER BY SEQ
---
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划侍芹(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序
oracle中不用ORDER BY怎么实现排序?
ORDER BY的含义就是通过某个字段进行排序(默认是ASC,可以省略)。\r\nsql:select * from scores order by score DESC;\r\n以上语句就是通过score字段进行降序排序。\r\nsql:select * from scores order by score ;\r\n以上语句岁悔就是通过score字段进行纯链升序排乎裤正序。\r\n备注:DESC表示降序,ASC表示升序。
关于oracle排序和oracle排序指定某些值排在前的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。