一、数据准备

建表如下:

CREATE TABLE `tab` (`id` int(11) NOT NULL AUTO_INCREMENT,`num` varchar(3) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;

新增数据:

INSERT INTO `tab`(`id`, `num`) VALUES (1, '1');
INSERT INTO `tab`(`id`, `num`) VALUES (2, '2');
INSERT INTO `tab`(`id`, `num`) VALUES (3, '3');
INSERT INTO `tab`(`id`, `num`) VALUES (4, '4');
INSERT INTO `tab`(`id`, `num`) VALUES (5, '5');
INSERT INTO `tab`(`id`, `num`) VALUES (6, '-1');
INSERT INTO `tab`(`id`, `num`) VALUES (7, '-2');
INSERT INTO `tab`(`id`, `num`) VALUES (8, '-3');
INSERT INTO `tab`(`id`, `num`) VALUES (9, '-4');
INSERT INTO `tab`(`id`, `num`) VALUES (10, '-5');
INSERT INTO `tab`(`id`, `num`) VALUES (11, '--');
INSERT INTO `tab`(`id`, `num`) VALUES (12, '--');

如图:

二、正负数排序

1️⃣正确写法

select * from tab ORDER BY num='--',convert(num,DECIMAL(10,2)) desc;
select * from tab ORDER BY num='--',cast(num as DECIMAL(10,2)) desc;
select * from tab ORDER BY num='--',num+0 desc;

2️⃣常规排序:只有正数部分倒序排列,负数部分不符合要求

3️⃣union 会导致某部分数据排序紊乱

三、union 相关

如果直接用如下sql语句是会报错:Incorrect usage of UNION and ORDER BY。

select * from t1 where name like 'l%' order by score asc
union
select * from t1 where name like '%m%' order by score asc

因为union在没有括号的情况下只能使用一个order by,所以报错。这个语句有2种修改方法。如下:

1️⃣可以将前面一个order by去掉,改成如下:

select * from t1 where name like 'l%'
union
select * from t1 where name like '%m%' order by score asc

该sql的意思就是先union,然后对整个结果集进行order by。

2️⃣可以通过两个查询分别加括号的方式,改成如下:

(select * from t1 where name like 'l%' order by score asc)
union
(select * from t1 where name like '%m%' order by score asc)

这种方式的目的是为了让两个结果集先分别order by,然后再对两个结果集进行union。这种方式虽然不报错,但是两个order by并没有效果,应该改成如下:

select * from
(select * from t1 where name like 'l%' order by score asc) t3
union
select * from
(select * from t1 where name like '%m%' order by score asc) t4

也就是说,order by不能直接出现在union的子句中,但是可以出现在子句的子句中。上面排序的sql也可以写为如下:

3️⃣顺便提一句,union和union all的区别:union 会过滤掉两个结果集中重复的行,而 union all 不会过滤掉重复行。

MySQL 正负数排序相关推荐

  1. python正负数排序_带有负值的Python sort()问题

    今天是个好日子, 我在使用sorted()函数对dict中的百分比值进行排序时遇到了问题.当我得到负数时,它会排序最大的负数,然后是第二大的负数.我希望最小的负数首先出现.有没有办法修改我的sorte ...

  2. ORACLE 正负数分开排序 SQL

    ORACLE 正负数分开排序 SQL 表结构 create table TEST_ORDER (t_name VARCHAR2(5),t_value NUMBER(3) ); 表数据 insert i ...

  3. mysql ef 随机排序_EFCore+Mysql倉儲層建設(分頁、多字段排序、部分字段更新)

    前沿 園子里已有挺多博文介紹了EFCore+Mysql/MSSql如何進行使用,但實際開發不會把EF層放在Web層混合起來,需要多個項目配合結構清晰的進行分層工作,本文根據個人實踐經驗總結將各個項目進 ...

  4. mysql按中文拼音字母排序_解析MySQL按常规排序、自定义排序和按中文拼音字母排序的方法...

    MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序.下面给出3种比较常用的排序方式,一起看看吧 MySQL常规排序.自定义排序和按中文拼音字母排 ...

  5. 程序员编程艺术第二十七章:不改变正负数相对顺序重新排列数组(无解?)

    第二十七章:不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1) 前言 本文开始之前,顺道说个事:CSDN最近开始评选10大博客专栏,投票地址为:http://event.blog.csd ...

  6. 正负数排列(用链表和数组实现)

    [问题描述] 一个未排序整数数组,有正负数,重新排列使负数排在正数前面.并且要求不改变原来的正负数之间相对顺序.比如输入1.7.-5.9.-12.15,输出-5.-12.1.7.9.15. [基本要求 ...

  7. mysql 首字母排序_Mysql sql书写之——实现首字母从A-Z排序

    1.常规排序ASC DESC ASC 正序 DESC倒叙 -- 此处不用多讲 2.自定义排序 自定义排序是根据自己想要的特定字符串(数字)顺序进行排序.主要是使用函数 FIELD(str,str1,s ...

  8. mysql首字母排序_mysql实现首字母从A-Z排序

    1.常规排序ASC DESC ASC 正序 DESC倒叙 -- 此处不用多讲 2.自定义排序 自定义排序是根据自己想要的特定字符串(数字)顺序进行排序.主要是使用函数 FIELD(str,str1,s ...

  9. mysql key value 排序_MySQL利用索引优化ORDER BY排序语句的方法

    创建表&创建索引 create table tbl1 ( id int unique, sname varchar(50), index tbl1_index_sname(sname desc ...

最新文章

  1. 区块链BaaS云服务(24)秘猿科技CITA
  2. osi七层模型tcp/udp
  3. jquery特效(1)—点击展示与隐藏全文
  4. 冠军奖10万日元+10公斤柠檬!一个简单的柠檬图像分级竞赛
  5. 学完python基础后应该学什么专业_小白刚入门Python,学完基础后,接下来的学习步骤!...
  6. CentOS 7下mysqld服务启动失败终极解决方案
  7. Mysql 大量数据快速导出
  8. LinkedIn庄振运:从国家部委公务员到硅谷系统性能专家,创新是唯一主旋律
  9. Rust: codewars的Highest and Lowest
  10. 小米总参php面试题_小米2019年PHP工程师面试题和答案解析
  11. 28 | 机器学习:如何教会机器识别黑灰产?
  12. linux鼠标怎么取出来,浅析linux中鼠标数据读取
  13. 深圳圈子联合将出席2016IT领袖峰会
  14. Mybatis-plus的Service
  15. UVM jelly_bean
  16. 好好学习天天向上之InfoPath学习系列(零):写在最前面
  17. 文件传服务器上全是乱码,解决txt文件上传oss服务器乱码的问题
  18. Arthas(阿尔萨斯)的基本使用
  19. 图片无损放大软件哪个好?图片放大不失真这样做
  20. 容器网络问题排查常用命令

热门文章

  1. 港片怀旧:《鹰爪铁布衫》(1)
  2. 算法设计与分析—分支限界法应用(头歌实验)
  3. 华为鸿蒙电视v65如何,华为智慧屏V65体验:不谈鸿蒙OS,作为大屏它也足够惊艳...
  4. Scratch课程:如何让角色实现渐变的效果?
  5. 王建宙五进36dj中挪动包围国际化
  6. 游资会带散户炒股吗?
  7. 1.2 Python介绍
  8. 用python玩转数据作业答案_大学mooc2020年用Python玩转数据作业答案
  9. 在面试中如何回答面试官的问题
  10. 多路温度采集控制系统(2)需求分析