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

2023-11-17

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL查询结果按照指定内容排序 的相关文章

  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • 在 PL/SQL 中将绑定变量与动态 SELECT INTO 子句结合使用

    我有一个关于 PL SQL 中的动态 SQL 语句中可以使用绑定变量的问题 例如 我知道这是有效的 CREATE OR REPLACE FUNCTION get num of employees p loc VARCHAR2 p job V
  • 不允许在 php 中连接到此 MariaDB 服务器

    我尝试在 php 中连接远程服务器数据库 但出现以下错误 Host xx xxx xx xx is not allowed to connect to this MariaDB server in 我的连接代码是这样的 servername
  • 如何在 MySQL 中求和时间?

    正如您在图片中看到的 我有一份停机报告 显示了所选工厂在选定日期的停机时间 现在我想添加所有的值 Time Duration 列并将其显示在附近的单独显示中 TOTAL TIME DURATION 例如 在图像中 所选日期为 2015 年
  • ora-04091 表正在发生变化-

    我正在使用一个函数来比较表 1 和表 2 中的所有列并返回 Y 或 N 在此基础上 我将更新我的表 1 但是当我运行合并语句时 它显示错误 ora 04091 Table1 正在发生变化 触发器 函数可能看不到它 我怎样才能解决这个问题 C
  • mysql转储到derby

    我正在使用 derby 在 eclipse 中进行开发 是否可以从 MySQL 转储表并以某种方式将其用于 derby 我知道 ddl 和 dml 对于两个 dbms 来说是不同的 但我正在寻找一种除了转储 导出之外的合适方法 我可以找到两
  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • 检查两个“select”是否相等

    有没有办法检查两个 非平凡的 选择是否等效 最初我希望两个选择之间有形式上的等价 但是答案在证明 sql 查询等价性 https stackoverflow com questions 56895 proving sql query equ
  • 在 Hibernate 中创建 UPDATE RETURNING 查询

    在 Oracle 中 我们可以创建一个更新查询 该查询将使用 RETURNING 子句返回更新的记录 Hibernate中有类似的功能吗 除了数据库生成的值之外 Hibernate 显然不需要返回更新的实例 因为对象传递给Session s
  • 如何从批量数据中的mysql列中删除所有非数字字符

    我想从列中删除所有非数字字符 我的数据库中有大量数据 目前我正在使用以下链接中描述的方法 http venerableagents wordpress com 2011 01 29 mysql numeric functions http
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • 通过触发器应用表的列权限

    现在 我有一个名为 Members 的表 其中包含内容 分为联系人数据 银行数据 现在 管理员应该能够创建 更新 删除用户 这些用户保存在另一个表中 该表只能访问管理员 用户应该获得自己的 mysql 用户帐户 管理员还应该能够设置权限 例
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • 通知设置的数据库设计

    用户可以打开或关闭 他的通知设置 帐户 用于通知 例如 更改帐户资料信息 收到新消息等 通知可以通过电子邮件或手机 推送或短信 发送 用户可以只有 1 封电子邮件和多个手机设备 有什么方法可以改进以下数据库设计或者您会采取不同的方式吗 让我
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主

随机推荐

  • React 初学 - 使用 If/Else 条件进行渲染以及使用 && 获得更简洁的条件- 个人笔记50

    MyComponent 的 state 中包含一个布尔值 用于跟踪是否要在 UI 中显示某个元素 按钮切换此值的状态 目前 它每次都呈现相同的 UI 用if else语句重写render 方法 如果display为true则返回当前标记 否
  • CARLA平台+Q-learning的尝试(gym-carla)

    接触强化学习大概有半年了 也了解了一些算法 一些简单的算法在gym框架也实现了 那么结合仿真平台Carla该怎么用呢 由于比较熟悉gym框架 就偷个懒先从这个开始写代码 项目地址 https github com cjy1992 gym c
  • 3、上台阶问题

    问题描述 有n级楼梯 有2种爬法 1次1级 2级 n级楼梯有多少种爬法 解决思路 n 1 1种爬法 n 2 2种爬法 n 3 第一次爬1级 有2种爬法 第一次爬2级 有1种爬法 共3种爬法 第n次爬楼梯 f n f n 1 f n 1 代码
  • 成功解决ubuntu-22.04的sudo apt-get update一直卡在【0% [Waiting for headers]】

    成功解决ubuntu 22 04的sudo apt get update一直卡在 0 Waiting for headers 问题描述 解决方案 问题描述 在下载安装包的时候一直卡在0 Waiting for headers 报错信息如下
  • 【动态内存管理】

    目录 前言 一 动态内存开辟函数 一 malloc 二 free 三 calloc 四 realloc 二 常见错误 一 对NULL指针解引用 二 对动态开辟空间的越界访问 三 对动态开辟内存多次free 四 未在初始位置进行free 五
  • 软件技术国产化

    软件技术国产化 如果大家做的项目是涉及国企 政府 校园的 应该都有听过 技术国产化 其实不单单是软件开发这一块 其它行业也会有这一说法 自从中美之间发生贸易战 美国对中国一些企业进行制裁 甚至封杀 像我们软件开发这行 会限制一些开发工具 技
  • 【面试题】java常考面试题

    java中sleep方法和wait方法的区别 sleep是线程中的方法 但是wait是Object中的方法 sleep方法不会释放锁 但是wait会释放锁 sleep方法不依赖于同步器synchronized 但是wait需要依赖synch
  • 进程-进程标识符

    什么是进程标识符 系统给每个进程定义了一个唯一标识该进程的非负正数 称作进程标识符 进程标识符可以简单的表示为主进程表中的一个索引 当某一进程终止后 其标识符可以重新用作另一进程的标识符 不过 在任何时刻 一个标识符所代表的进程是唯一的 系
  • 在VMware Workstation Pro中安装Windows 11正式版(包括添加TPM 2.0支持,而不是忽略)

    目录 0 首先检查Windows 11需要的环境 1 创建一个虚拟机 1 1 选择使用下载好的Windows11镜像 1 2 选择操作系统为Windows 10 x64 1 3 给虚拟机系统起个名字并指定存放路径 1 4 把创建的虚拟硬盘大
  • JDBC程序具体实现步骤演示

    再熟悉JDBC的编程步骤后 接下来通过一个案例并依照上一小节所讲解的步骤来演示JDBC的使用 此案例会从tb user表中读取数据 并将结果打印在控制台 需要说明的是 Java中的JDBC是用来连接数据库从而执行相关数据相关操作的 因此在使
  • 如何科学地利用高光谱图像合成真彩色RGB图像?

    如何科学地利用高光谱图像合成真彩色RGB图像 1 前言 参考链接 色匹配函数是什么 知乎 zhihu com 23 颜色知识1 人类的视觉系统与颜色 知乎 zhihu com 色彩空间基础 知乎 zhihu com 色彩空间表示与转换 知乎
  • BeanCopier对象复制学习

    BeanCopier是Cglib包中的一个类 用于对象的复制 注意 目标对象必须先实例化 而且对象必须要有setter方法 初始化例子 BeanCopier copier BeanCopier create Source class Tar
  • 零信任架构

    零信任架构 参考文章 基于SDP技术构建零信任安全 怎样实现零信任安全架构 什么是零信任 物理边界曾经是可信网络和不可信网络之间的有效分割 防火墙通常位于网络的边缘 基于静态策略来控制网络流量 位于防火墙内部的用户会被授予高信任等级来访问企
  • Flutter笔记(二)

    一 Android 集成 Flutter 实现流程 闲鱼 头条 在 Android 集成 Flutter 模块都有自己的实现方案 闲鱼团队方案 头条团队方案 我们以官方方案方式为主 一 Android 集成 Flutter 实现流程 闲鱼
  • 区块链+教育 解决教育行业所面临的问题

    众所周知 教育对于一个国家 一个民族来说是成就未来的重要方式 它的社会职能 就是传递生产经验和社会生活经验 促进新生一代的成长 但是教育行业也有被一些问题困扰着 怎样运用区块链技术解决这些问题 1 完善学籍档案管理 我们都知道 现在很多地方
  • 基于规则的优化

    MySQL会对用户编写的查询语句执行一些重写操作 比如 移除不必要的括号 常量传递 移除没用的条件 表达式计算 最好让那个索引列以单独的形式出现在搜索条件表达式中 HAVING子句和WHERE子句的合并 如果查询语句中没用出现诸如 SUM
  • java web项目答辩答辩题总结(书本网上语言答辩+自己的语言答辩)

    答辩每个人的总分为1 5分 每个人主要问3个问题 开发流程 系统架构 项目模块 功能 项目得失重定向与转发 九个隐式对象 get与post的区辨 jsp有静态包含 动态包含 两者的区辨 什么是MVC web系统架构 java web项目答辩
  • 虚拟机ubuntu18.04桥接模式详解

    背景 虚拟机ubuntu18 04桥接模式下 配置静态ip 配置静态ip vim etc network interfaces 具体配置如下 auto lo iface lo inet loopback auto ens33 iface e
  • 算法题Day6-第三大的数

    给定一个非空数组 返回此数组中第三大的数 如果不存在 则返回数组中最大的数 要求算法时间复杂度必须是O n 示例 1 输入 3 2 1 输出 1 解释 第三大的数是 1 示例 2 输入 1 2 输出 2 解释 第三大的数不存在 所以返回最大
  • SQL查询结果按照指定内容排序

    一般来说 我们在开发SQL脚本的时候 遇到需要排序的内容 用order by需要排序的字段就可以满足我们排序的需求 asc为升序 desc为降序 不指定关键字默认为升序 但是有时候 我们需要的排序不仅仅是升序和降序 asc与desc并不能满