SQL查询结果按照指定内容排序

简介: SQL查询结果按照指定内容排序
一般来说,我们在开发SQL脚本的时候,遇到需要排序的内容,用order by需要排序的字段就可以满足我们排序的需求,asc为升序、desc为降序,不指定关键字默认为升序。但是有时候,我们需要的排序不仅仅是升序和降序,asc与desc并不能满足我们的排序需求,所以我们需要用到按照指定的内容进行排序的操作,下面我们就从MySQL与Oracle两个数据库来看一下具体的操作:

一、MySQL

1,函数FIELD

格式:order by FIELD(需要排序的字段,字段内容1,字段内容2,字段内容3)
示例:order by FIELD(office_name,'云南办','江苏办','山西办')
释义:数据结果按照office_name排序,指定顺序为'云南办','江苏办','山西办'

特殊情况说明:

(1)指定的排序内容为字段的所有内容

意思是office_name里面只包含'云南办','江苏办','山西办',可以直接用下面语句进行排序

order by FIELD(office_name,'云南办','江苏办','山西办')
释义:查询结果排序内容为四川省、甘肃省、陕西省
示例:
SELECT DISTINCT office_code,office_name 
FROM EC_ZB.ecorder_completion_rate_day
WHERE 1=1
AND office_name IN ('云南办','江苏办','山西办')
ORDER BY FIELD(office_name,'云南办','江苏办','山西办') 

结果展示:
SQL按指定内容排序

(2)指定的排序内容为字段的部分内容

意思是office_name里面不仅包含'云南办','江苏办','山西办',还有别的内容,但是你只想把这三个省的内容放在最前面,那么你需要用下面的语句进行排序

order by FIELD(office_name,'山西办','江苏办','云南办') desc
释义:这样的排序内容为云南办、江苏办、山西办、其他省份数据
SELECT DISTINCT office_code,office_name 
FROM EC_ZB.ecorder_completion_rate_day
WHERE 1=1
-- AND office_name IN ('云南办','江苏办','山西办')
ORDER BY FIELD(office_name,'山西办','江苏办','云南办')  desc

结果展示:
指定的排序内容为字段的部分内容1
如果使用order by FIELD(office_name,'云南办','江苏办','山西办') ,
排序内容为 其他省份,'云南办','江苏办','山西办'

SELECT DISTINCT office_code,office_name 
FROM EC_ZB.ecorder_completion_rate_day
WHERE 1=1
-- AND office_name IN ('云南办','江苏办','山西办')
ORDER BY FIELD(office_name,'云南办','江苏办','山西办') 

结果展示:
指定的排序内容为字段的部分内容2

2,函数locate

locate的用法和field很相似,只是locate是判断字符串的内容是否包含在指定的字符串里。下面是详细讲解

格式:locate(subStr,string) 
释义:判断字符串(string)中是否包含另一个字符串(subStr),函数返回的是subStr在string中出现的位置
示例:ORDER BY LOCATE(office_name,'云南办,江苏办,山西办') 

SELECT DISTINCT office_code,office_name 
FROM EC_ZB.ecorder_completion_rate_day
WHERE 1=1
AND office_name IN ('云南办','江苏办','山西办')
ORDER BY LOCATE(office_name,'云南办,江苏办,山西办') 

结果展示
函数locate

二、Oracle

在Oracle中,使用decode函数,就可以实现按照指定内容排序的功能,下面是详细的讲解。

格式:order by decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
示例:ORDER BY DECODE(agency_name,'云南独资办事处','1','江苏独资办事处','2','四川直营办事处','3')
释义:查询结果按照agency_name字段的云南独资办事处、江苏独资办事处、四川直营办事处排序

1,指定的内容为字段的全部内容

SQL例子:

SELECT DISTINCT  AGENCY_CODE ,agency_name 
FROM ecorder.ec_order
WHERE 1=1
AND AGENCY_CODE IS NOT NULL
AND agency_name IN ('云南独资办事处','江苏独资办事处','四川直营办事处')
ORDER BY DECODE(agency_name,'云南独资办事处','1','江苏独资办事处','2','四川直营办事处','3')

查询结果:
decode指定内容排序

2,指定内容为字段的部分内容

Oracle的decode函数,和MySQL的field()函数还是有差别的,即便是你在排序的时候,指定的内容为字段的部分内容,也不会影响排序结果,首先按照指定内容排序,其他的放在指定内容的后面。
示例SQL:

SELECT DISTINCT  AGENCY_CODE ,agency_name 
FROM order.order
WHERE 1=1
AND AGENCY_CODE IS NOT NULL
ORDER BY DECODE(agency_name,'云南独资办事处','1','江苏独资办事处','2','四川直营办事处','3')

查询结果:
decode指定部分字段内容排序
到这里,指定字段内容的排序就结束了,大家可以按照自己的需求以及目标数据库进行对应选择使用,希望可以给你带来思路和开发便利。

我是晓之以理的喵~,欢迎交流。

相关文章
|
6天前
|
SQL Java 数据库连接
JDBC连接SQL Server2008 完成增加、删除、查询、修改等基本信息基本格式及示例代码
这篇文章提供了使用JDBC连接SQL Server 2008数据库进行增加、删除、查询和修改操作的基本步骤和示例代码。
|
6天前
|
SQL 存储 分布式计算
|
1天前
|
SQL 数据库
实时数仓 Hologres产品使用合集之如何找回之前的SQL查询代码
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
1天前
|
SQL 数据库 UED
SQL查询功能的全面解析与实用技巧
SQL(Structured Query Language)作为数据库管理的核心语言,其查询功能是实现数据检索、分析和报告的关键
|
1天前
|
SQL 数据库 数据库管理
SQL查询是否都需要解析:深入解析SQL执行流程与优化技巧
在数据库管理系统中,SQL(Structured Query Language)查询是用户与数据库交互的主要方式
|
1天前
|
SQL 移动开发 Oracle
SQL查询连续六天数据记录的技巧与方法
在数据库查询中,实现针对连续几天(如连续六天)的数据筛选是一个常见且稍具挑战性的任务
|
1天前
|
SQL 存储 安全
SQL视图实验:创建、查询与管理技巧
在数据库管理系统中,视图(View)是一个虚拟表,其内容由查询定义
|
5天前
|
SQL 存储 测试技术
SQL Server 查询超时问题排查
【8月更文挑战第14天】遇到SQL Server查询超时,先检查查询复杂度与索引使用;审视服务器CPU、内存及磁盘I/O负载;审查SQL Server配置与超时设置;检测锁和阻塞状况;最后审查应用代码与网络环境。每步定位问题根源,针对性优化以提升查询效率。务必先行备份并在测试环境验证改动。
|
6天前
|
SQL 存储 关系型数据库
SQL SERVER 查询所有表 统计每张表的大小
SQL SERVER 查询所有表 统计每张表的大小
16 0
|
8天前
|
SQL
SQL SERVER 查询表结构,导出到Excel 生成代码用
SQL SERVER 查询表结构,导出到Excel 生成代码用
16 0