一起聊聊ORACLE中ORDER BY的多种排序


本篇文章给大家带来了关于oracle的相关知识,其中主要介绍了关于order by多种排序的相关问题,包括了按单个字段排序、按多个字段排序、按子串排序等等,希望对大家有帮助。

一起聊聊ORACLE中ORDER BY的多种排序

推荐教程:《Oracle学习教程》

1. 按单个字段排序

升序:ORDER BY ASC(默认)

降序:ORDER BY DESC

以指定的次序返回查询结果实际提取数据或生成报表时,一般都要根据一定的顺序查看,比如,想查看单位所雇员工的信息。

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY hiredate ASC;

给查询结果排序这种语句很多人都会写,但除了“ORDER BY hiredate ASC”这种写法外,还可以写成“ ORDER BY 3 ASC”,意思是按第三列排序。

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY 3 ASC;

当取值不定时,用这种方法就很方便,需要注意的是,

用数据来代替列位置只能用于 order by子句中,其他地方都不能用

2. 按多个字段排序

如果按多列排序且有升有降怎么办?如:按部门编号升序,并按工资降序排列排序时有两个关键字:ASC表示升序、DESC表示降序所以我们在 order by后加两列,并分别标明ASC、DESC。

SELECT empno, deptno, sal, ename, job FROM emp ORDER BY 2 ASC, 3 DESC;

下面用图的形式进行介绍,如下图所示,多列排序时,若前面的列有重复值(如deptno = 10有3行数据),后面的排序才有用。相当于是通过前面的列把数据分成了几组,然后每组的数据再按后面的列进行排序。

 3. 按子串排序

按子串排序有一种速査法就是按顾客电话号码尾号的顺序记录,这样在查找的时候就可以快速缩小査询范围,增强顾客的认可度。如果要按这种方法排序,应该怎么做呢?通过函数取出后面几位所需的信息即可。

SELECT last_name AS 名称,
       phone_number AS 号码,
       salary as 工资,
       substr(phone_number, -4) AS 尾号
  FROM hr.employees
 WHERE rownum < 5
 ORDER BY 4;

 由此可见:只要能将数据査询出来,就能根据相应的信息排序。

4. TRANSLATE

语法格式:TRANSLATE(expr, from_string, to_string)

示例如下:

SELECT TRANSLATE( 'ab 你好 bcadefg', 'abcdefg', '1234567' ) AS NEW_STR FROM DUAL;

from_string与to_string以字符为单位,对应字符一一替换。

如果 to_string为空,则返回空值 

SELECT TRANSLATE( 'ab 你好 bcadefg', 'abcdefg', '' ) AS NEW_STR FROM DUAL;

如果 to_string对应的位置没有字符,删除 from_string中列出的字符将会被消掉。 

SELECT TRANSLATE( 'ab 你好 bcadefg', '1abcdefg', '1' ) AS NEW_STR FROM DUAL;

一览妙笔 一览妙笔

自媒体、编剧、营销人员写作工具

一览妙笔 50 查看详情 一览妙笔

 

5. 按数字和字母混合字符串中的字母排序

首先创建VIEW如下:

CREATE OR REPLACE VIEW V 
as 
SELECT empno || ' ' || ename AS data FROM emp;
select * from V;

 这个需求就难一点了,看到里面的字母(也就是原来的列 ename)吗?要求按其中的字母(列 ename)排序。

那么就要先取出其中的字母才行,我们可以用 translate的替换功能,把数字与空格都替换为空:

SELECt data, translate (data, '- 0123456789', '-' )AS ename
  FROM v
 ORDER BY 2;

6. 处理排序空值

Oracle默认排序空值在后面,如果想把空值(如emp.comm)显示在前面怎么办,用NVL(comm,-1)吗?

SELECT ename, sal, comm, nvl(comm, - 1) order_col FROM emp ORDER BY 4;

 

也许很多人都是用的这种方法,但这种方法需要对列类型及其中保存的数据有所了解才行,而且保存的数据如果有变化,该语句就要重新维护。
其实可以用关键字 NULLS FIRST和 NULLS LAST。

空值在前

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS FIRST;

 空值在后

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS LAST;

 是不是要方便得多?

7. 根据条件取不同列中的值来排序

有时排序的要求会比较复杂,比如:领导对工资在1000到2000元之间的员工更感兴趣,于是要求工资在这个范围的员工要排在前面,以便优先査看。
对于这种需求,我们可以在查询中新生成一列,用多列排序的方法处理:

SELECT empno AS 编码,
       ename AS 姓名,
       CASE
         WHEN sal > 1000 AND sal < 2000 THEN
          1
         ELSE
          2
       END AS 级别,
       sal AS工资
  FROM emp
 WHERE deptno = 30
 ORDER BY 3, 4;

 

 

可以看到,950与2850都排在了后面,也可以不显示级别,直接把 case when放在order by中

SELECT empno AS 编码, ename AS 姓名, sal AS工资
  FROM emp
 WHERE deptno = 30
 ORDER BY CASE
            WHEN sal >= 1000 AND sal < 2000 THEN
             1
            ElSE
             2
          END,
          3;

 

推荐教程:《Oracle教程》

以上就是一起聊聊ORACLE中ORDER BY的多种排序的详细内容,更多请关注其它相关文章!


# 降序  # 瑞诺国际网站建设  # 双十一产品营销推广策略  # 网站建设建议方案范文  # 寻乌网站优化推广  # 浙江做网站建设哪家好呢  # 推广短视频营销哪家便宜  # seo排名推广费用低  # 营销推广客服电话  # 安阳建设局网站  # 阳江网站关键词优化公司  # ORACLE  # 排在  # 怎么看  # 才行  # 你好  # 可以用  # 很多人  # 多个  # 默认值  # 升序 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 无人机考证官网 中国民航无人机考证官网登录入口  vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法  RxJS中如何高效地在一个函数内处理和合并多个数据集合  电脑开不了机怎么办 电脑无法开机的解决方法  Fedora怎么安装 Fedora Workstation安装步骤  12306不能订票的时间段是固定的吗? | 节假日购票时间有无变化  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  《知到》打卡课程方法  高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法  Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】  CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程  小米civi如何设置锁屏时间  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  从J*a应用程序中导出MySQL表数据的技术指南  Python中深度嵌套字典与列表的数据提取与条件过滤指南  房产|直播|视频号怎么认证开通?|直播|需要什么资质?  4399正版网页版入口高清直达链接  苹果11如何更换iCloud账号_苹果11账号切换的具体步骤  如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色  手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧  cad视图选项卡不见了怎么办_cad视图标签恢复显示方法  diskgenius分区工具如何设置Bios启动项  OpenWeatherMap API:通过城市名称获取天气预报数据指南  163邮箱网页版官方登录入口 163邮箱网页版访问页面  苹果SE如何开启单手模式_苹果SE单手操作功能  如何用mysql开发用户注册登录功能_mysql用户注册登录数据库设计  c++如何实现观察者设计模式_c++行为型设计模式实战  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  优化2xN网格最大路径和的动态规划算法实践  《淘票票》添加到苹果钱包教程  魔法祈幻界兑换码礼包大全  传统曲艺莲花落的表演形式是  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  PHP中获取HTTP响应状态消息:方法与限制  悟空浏览器网页版在线工具 悟空浏览器网页版在线平台入口  Django模型动态关联检查:高效管理复杂关系  小红书如何引流到私信?引流到私信有用吗?  热血江湖归来医师加点攻略  J*aScript实现网页表单实时输入字段比较与验证教程  虫虫助手如何更新游戏  《气泡星球》兑换码礼包大全  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐  Win11怎么开启HDR_Windows 11显示器画质增强设置  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  Mac hosts文件在哪里_Mac修改hosts文件详细教程  《土豆雅思》修改密码方法 

 2022-03-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.