Mysql中ORDER BY 排序怎么使用?指定顺序和多字段排列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql中ORDER BY 排序怎么使用?指定顺序和多字段排列相关的知识,希望对你有一定的参考价值。
参考技术A ORDER BY 默认按升序排列,因此 ASC (升序)子句是可选的。另外,还可以按降序排列,为此可以使用 DESC(降序)。
ORDER BY 子句中还可以用数字来表示对应的列 3 对应于 SELECT 中指定的第 3 列,即工资。
按从左到右的顺序依次根据 ORDER BY 子句中指定的列进行排序。
指定用于排序的列时,如果使用的是 SELECT 子句中列的数字位置,那么指定的数字不能超过 SELECT 子句中指定的列数。( 不能超出索引 )
通常,可以按 SELECT 子句中未指定的列进行排序,但必须指定列名。然而,如果在查询中使用了GROUP BY 或 DISTINCT 子句,就不能按SELECT 子句中未指定的列进行排序。
要求:显示部门编号为 10 的员工的姓名、职位和薪水,并根据薪水按从低到高的顺序排列想获得上面这样的数据结果
如果想对表中多个字段进行不同的排列如工资表按照升序排列,年龄按照降序排列
可以再ORDER之后用逗号隔开不同排列的字段
mysql根据某个字段排序,order by case when使用
解决了遇到的问题,转载记录一下;
本篇文章为大家展示了MySQL中怎么按照指定的字段排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
用到的测试数据
drop table a;
create table a (x varchar(10),y varchar(10));
insert into a values('yujx','all'),('oracle','pc'),('mysql','mobile');
#表a的测试数据如下
MySQL>select * from a;
+--------+--------+
| x | y |
+--------+--------+
| yujx | all |
| oracle | pc |
| mysql | mobile |
+--------+--------+
3 rows in set (0.00 sec)
#默认的按y排序(升序或降序)结果
MySQL>select * from a order by y;
+--------+--------+
| x | y |
+--------+--------+
| yujx | all |
| mysql | mobile |
| oracle | pc |
+--------+--------+
3 rows in set (0.00 sec)
MySQL>select * from a order by y desc;
+--------+--------+
| x | y |
+--------+--------+
| oracle | pc |
| mysql | mobile |
| yujx | all |
+--------+--------+
3 rows in set (0.00 sec)
现在想按mobile->all->pc的顺序排序,可使用如下方法
方法一:使用 FIND_IN_SET(str,strlist) 函数
MySQL>select * from a order by find_in_set(y,'mobile,all,pc');
+--------+--------+
| x | y |
+--------+--------+
| mysql | mobile |
| yujx | all |
| oracle | pc |
+--------+--------+
3 rows in set (0.00 sec)
方法二:使用FIELD(str,str1,str2,str3,…)函数
#FIELD函数主要用途会返回值在后面列表中的位置,如下
MySQL>select x,y,field(y,'mobile','pc','all') sort_Nu from a order by field(y,'mobile','pc','all');
+--------+--------+---------+
| x | y | sort_Nu |
+--------+--------+---------+
| mysql | mobile | 1 |
| oracle | pc | 2 |
| yujx | all | 3 |
+--------+--------+---------+
3 rows in set (0.00 sec)
方法三:使用 SUBSTRING_INDEX(str,delim,count) 函数
MySQL>select * from a order by substring_index('mobile,all,pc',y,1);
+--------+--------+
| x | y |
+--------+--------+
| mysql | mobile |
| yujx | all |
| oracle | pc |
+--------+--------+
3 rows in set (0.00 sec)
#看下面 substring_index(‘mobile,all,pc’,y,1) 取值,可知按b列的值排序 y的顺序固然就是 mobile,all,pc了
MySQL>select y,substring_index('mobile,all,pc',y,1) b from a;
+--------+-------------+
| y | b |
+--------+-------------+
| all | mobile, |
| pc | mobile,all, |
| mobile | |
+--------+-------------+
3 rows in set (0.00 sec)
方法四:使用case when
MySQL>select x,y,case when y='mobile' then 1 when y='all' then 2 when y='pc' then 3 end sort_nu from a order by case when y='mobile' then 1 when y='all' then 2 when y='pc' then 3 end;
+--------+--------+---------+
| x | y | sort_nu |
+--------+--------+---------+
| mysql | mobile | 1 |
| yujx | all | 2 |
| oracle | pc | 3 |
+--------+--------+---------+
3 rows in set (0.00 sec)
转载自:MySQL中怎么按照指定字段排序
以上是关于Mysql中ORDER BY 排序怎么使用?指定顺序和多字段排列的主要内容,如果未能解决你的问题,请参考以下文章
mysql根据某个字段排序,order by case when使用