SQL语句两个字段同时order by 排序


更多"C/C++、PostgreSQL、编译原理、计算机原理、TCP/IP、数据结构&算法、Linux编程”等技术文章请关注公众号君子黎


1.使用两个字段同时order by 排序

sql支持多个字段进行order by排序,各字段之间用逗号","隔开。如:

SELECT *FROM tablename order by column1,column2,column3 ;
如果不显示指出是升序还是降序,则默认为是升序
(1)ORDER BY column1,column2;
 表示:column1和column2都是升序

 (2)ORDER BY column1,column2 DESC;
 表示:column1 升序,column2是降序;

 (3)ORDER BY column1 DESC,column2;
 表示:column1降序,column2升序

 (4)ORDER BY column1 DESC,column2 DESC;
 表示:column1和column2都是降序。

注:想要对两个字段都同是进行升序/降序操作时候,必须得同时在每个字段
的后面加上关键字(asc/desc)。若是想要对两个关键字段按升序排序,
前面一个字段没有写关键字asc没关系,因为sql默认就是升序;但是若是
想要对两个关键字段进行降序操作,则必须得对两个关键字段都加上desc;
如: column1 desc,column2 desc;
  • 我今天就范了(4)个排序规则的错误,第一个字段没有加desc,导致最终结果不正确。后来调试了好久才找到问题的根本原因。

2.具体操作如下:

(1)select database();查看当前的数据库,show tables;查看当前数据库汇总的所有存在的表。当前 的数据库MetaData是一个空的数据库,没有表,所以创建一个新的表Emplee

这里写图片描述
(2)使用如下命令创建一个新的表Emplee;各字段和类型如下:

 create table if not exists Emplee(
        id int unsigned auto_increment,
        writetime timestamp ,
        name varchar(20),
        age int, 
        primary key(id)) character set utf8;

这里写图片描述
(3)向表Emplee中分别插入几条数据;
这里写图片描述

3.下面分别是几个不同排序查询的差异

(1)select *from Emplee;

+----+---------------------+--------+------+
| id | writetime           | name   | age  |
+----+---------------------+--------+------+
|  1 | 2018-03-27 23:17:37 | 小明   |   22 |
|  2 | 2018-03-27 23:17:49 | 小红   |   23 |
|  3 | 2018-03-27 23:17:57 | 小张   |   33 |
|  4 | 2018-03-27 23:18:05 | 小李   |   43 |
|  5 | 2018-03-27 23:18:22 | 小黑   |   13 |
|  6 | 2018-03-27 23:18:30 | 小白   |   18 |
+----+---------------------+--------+------+
6 rows in set (0.00 sec)

(2)select *from Emplee order by id desc,writetime desc;

+----+---------------------+--------+------+
| id | writetime           | name   | age  |
+----+---------------------+--------+------+
|  6 | 2018-03-27 23:18:30 | 小白   |   18 |
|  5 | 2018-03-27 23:18:22 | 小黑   |   13 |
|  4 | 2018-03-27 23:18:05 | 小李   |   43 |
|  3 | 2018-03-27 23:17:57 | 小张   |   33 |
|  2 | 2018-03-27 23:17:49 | 小红   |   23 |
|  1 | 2018-03-27 23:17:37 | 小明   |   22 |
+----+---------------------+--------+------+
6 rows in set (0.00 sec)

(3)select *from Emplee order by id , writetime asc;

+----+---------------------+--------+------+
| id | writetime           | name   | age  |
+----+---------------------+--------+------+
|  1 | 2018-03-27 23:17:37 | 小明   |   22 |
|  2 | 2018-03-27 23:17:49 | 小红   |   23 |
|  3 | 2018-03-27 23:17:57 | 小张   |   33 |
|  4 | 2018-03-27 23:18:05 | 小李   |   43 |
|  5 | 2018-03-27 23:18:22 | 小黑   |   13 |
|  6 | 2018-03-27 23:18:30 | 小白   |   18 |
+----+---------------------+--------+------+
6 rows in set (0.00 sec)

(4)select *from Emplee order by id desc,writetime asc;

+----+---------------------+--------+------+
| id | writetime           | name   | age  |
+----+---------------------+--------+------+
|  6 | 2018-03-27 23:18:30 | 小白   |   18 |
|  5 | 2018-03-27 23:18:22 | 小黑   |   13 |
|  4 | 2018-03-27 23:18:05 | 小李   |   43 |
|  3 | 2018-03-27 23:17:57 | 小张   |   33 |
|  2 | 2018-03-27 23:17:49 | 小红   |   23 |
|  1 | 2018-03-27 23:17:37 | 小明   |   22 |
+----+---------------------+--------+------+
6 rows in set (0.00 sec)

4. 更多order by的补充说明

     补充于:2020-12-23 13:23:22

     看到有读者留言关于SQL中对多个字段进行order by时,字段优先级的问题,这里做几个补充。

     (1)当order by对多个字段进行排序(升序或降序)处理时, 出现在order by后第一个字段优先。

     (2)若order by后第一个字段的值相同的记录有多条,则继续按照第二个字段的值(数值或字符ASCII)大小进行排序。比如:

SELECT A_1, B_1, C FROM table ORDER BY A_A, B_1;
       10   'A'  'C'
       /* 这里C字段不关注, 重点关注字段 A_1 和 B_1. 当A_1字段相同的有两条记录,则按照B_1字段进行排序。
       *  20  'B' 'C' 这条记录中的字段B_1要小于 20 ‘C’ 'C'这条记录中的字段B_1. 所以它先出现前面。
       */
       20   'B'  'C'   
       20   'C'  'C'

     (3)对于order by子句中的列的位置很重要, DESC/ASC的位置也同样重要,同样的记录条数,不同的字段位置,得到的效果大相庭径。

全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹 是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹 待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹 能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥 内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务