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

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

相关文章
|
9天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
36 9
|
29天前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
105 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
2月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
39 8
|
2月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
65 4
|
2月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
2月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
169 10
|
2月前
|
SQL 关系型数据库 MySQL
|
2月前
|
SQL 关系型数据库 MySQL
SQL中,可以使用 `ORDER BY` 子句来实现排序功能
【10月更文挑战第26天】SQL中,可以使用 `ORDER BY` 子句来实现排序功能
158 6
|
3月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
2月前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
37 0