MySQL 正负数排序
一、数据准备
建表如下:
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 正负数排序相关推荐
- python正负数排序_带有负值的Python sort()问题
今天是个好日子, 我在使用sorted()函数对dict中的百分比值进行排序时遇到了问题.当我得到负数时,它会排序最大的负数,然后是第二大的负数.我希望最小的负数首先出现.有没有办法修改我的sorte ...
- ORACLE 正负数分开排序 SQL
ORACLE 正负数分开排序 SQL 表结构 create table TEST_ORDER (t_name VARCHAR2(5),t_value NUMBER(3) ); 表数据 insert i ...
- mysql ef 随机排序_EFCore+Mysql倉儲層建設(分頁、多字段排序、部分字段更新)
前沿 園子里已有挺多博文介紹了EFCore+Mysql/MSSql如何進行使用,但實際開發不會把EF層放在Web層混合起來,需要多個項目配合結構清晰的進行分層工作,本文根據個人實踐經驗總結將各個項目進 ...
- mysql按中文拼音字母排序_解析MySQL按常规排序、自定义排序和按中文拼音字母排序的方法...
MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序.下面给出3种比较常用的排序方式,一起看看吧 MySQL常规排序.自定义排序和按中文拼音字母排 ...
- 程序员编程艺术第二十七章:不改变正负数相对顺序重新排列数组(无解?)
第二十七章:不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1) 前言 本文开始之前,顺道说个事:CSDN最近开始评选10大博客专栏,投票地址为:http://event.blog.csd ...
- 正负数排列(用链表和数组实现)
[问题描述] 一个未排序整数数组,有正负数,重新排列使负数排在正数前面.并且要求不改变原来的正负数之间相对顺序.比如输入1.7.-5.9.-12.15,输出-5.-12.1.7.9.15. [基本要求 ...
- mysql 首字母排序_Mysql sql书写之——实现首字母从A-Z排序
1.常规排序ASC DESC ASC 正序 DESC倒叙 -- 此处不用多讲 2.自定义排序 自定义排序是根据自己想要的特定字符串(数字)顺序进行排序.主要是使用函数 FIELD(str,str1,s ...
- mysql首字母排序_mysql实现首字母从A-Z排序
1.常规排序ASC DESC ASC 正序 DESC倒叙 -- 此处不用多讲 2.自定义排序 自定义排序是根据自己想要的特定字符串(数字)顺序进行排序.主要是使用函数 FIELD(str,str1,s ...
- mysql key value 排序_MySQL利用索引优化ORDER BY排序语句的方法
创建表&创建索引 create table tbl1 ( id int unique, sname varchar(50), index tbl1_index_sname(sname desc ...
最新文章
- 区块链BaaS云服务(24)秘猿科技CITA
- osi七层模型tcp/udp
- jquery特效(1)—点击展示与隐藏全文
- 冠军奖10万日元+10公斤柠檬!一个简单的柠檬图像分级竞赛
- 学完python基础后应该学什么专业_小白刚入门Python,学完基础后,接下来的学习步骤!...
- CentOS 7下mysqld服务启动失败终极解决方案
- Mysql 大量数据快速导出
- LinkedIn庄振运:从国家部委公务员到硅谷系统性能专家,创新是唯一主旋律
- Rust: codewars的Highest and Lowest
- 小米总参php面试题_小米2019年PHP工程师面试题和答案解析
- 28 | 机器学习:如何教会机器识别黑灰产?
- linux鼠标怎么取出来,浅析linux中鼠标数据读取
- 深圳圈子联合将出席2016IT领袖峰会
- Mybatis-plus的Service
- UVM jelly_bean
- 好好学习天天向上之InfoPath学习系列(零):写在最前面
- 文件传服务器上全是乱码,解决txt文件上传oss服务器乱码的问题
- Arthas(阿尔萨斯)的基本使用
- 图片无损放大软件哪个好?图片放大不失真这样做
- 容器网络问题排查常用命令