MySQL 升序降序

MySQL 升序降序,第1张

MySQL排序 有时候很容易记混,我这里把他记录了下:

desc是降序

asc是升序(默认不写就是升序)

MySql语句:

1.带条件的排序

2.不带条件的sql直接排序

第二节为大家介绍了数据的查询,这一小节为大家深入讲解查询过程中的数据分组和排序,分组关键字为:group by,排序关键字为:order by,过滤分组的关键字为:having;

group by:对查询的数据按照某一类型进行分组, group by 一般用在order by子句之前,where子句之后

order by:对查询的数据进行某一类进行排序 或 对分组后的数据进行排序

having:对分组后的数据进行条件过滤

继续以上一章创建的客户表为例,表名: customer ,表有列: cus_id,cus_no,cus_name,cus_age,cus_adds。

eg:查询客户的基本信息,以id进行分组: select cus_id,count(*) as num from customer group by cus_id  num表示对应的cus_id有多少客户数据, 查询结果如下

如果分组的列中有null值,那么null将作为一个分组返回,如果有多个行都为null值,它们将会被分为一组返回。 group by 必须用在where子句之后,order by子句之前。

除group by可以进行分组过滤数据外,having也可以进行过滤分组;having过滤和where类似,唯一区别在于where是过滤行,而having是过滤分组,可看以下列子:

eg: 查询以id分组后数据总量两条以上的数据: select cus_id,count(*) as num from customer group by cus_id having count(*) >= '2'满足条件的就只有一条数据

order by主要用于数据排序的情况,当查询数据量较大时,有序的数据会让人更好地直观观察数据,order by 关键字用于对结果集按照一个列或者多个列进行排序。此外order by 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。使用方法如下

eg:查询客户的基本信息,以年龄进行排序,默认升序:select * from customer order by cus_age

eg:查询客户的基本信息,以年龄进行排序,降序方式排序:select * from customer order by cus_age DESC

升序使用ASC,降序使用DESC,系统默认为升序。注意两者之间的差异

当对多个列进行排序时,order by使用方法如下:

order by A,B   --过滤数据都是默认按升序排列

order by A desc,B   --过滤数据时 A 降序,B 升序排列

order by A ,B desc   --过滤数据时 A 升序,B 降序排列

desc 或者 asc 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序。

本小节介绍排序分组就到这里了,通过多分组排序的介绍,知道了group by,order by,having三者之间的差异和区别,大家可以在自己电脑多编写几个脚本,深入了解三个关键字的使用。

1、单列排序

SELECT * FROM test1 ORDER BY date_time

默认升序,降序后面接"DESC"即可。

2、多列排序 

SELECT * FROM test1 ORDER BY `status`, date_time DESC

首先按`status`字段排序,若`status`相等,则按data_time排序。

3、自定义排序

SELECT * FROM test1 ORDER BY FIELD(`status`, 3, 2, 4, 1, 5), date_time DESC

使用"FIELD()"函数,可指定顺序。

4、其他条件排序

先按大于等于当前时间升序,再按小于当前时间降序,支持分页。

SELECT * FROM test1 ORDER BY date_time <NOW(), IF(date_time <NOW(), 0, date_time), date_time DESC

附加SQL脚本:

CREATE TABLE `test1` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `name` varchar(50) NOT NULL,

  `date_time` datetime NOT NULL,

  `status` int(5) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

INSERT INTO `test1` VALUES

(NULL, '测试1', '2018-03-05 11:09:00', 1),(NULL, '测试2', '2018-03-06 11:09:00', 1),(NULL, 'abc', '2018-03-07 11:09:00', 1), 

(NULL, 'def', '2018-04-08 11:09:00', 2),(NULL, '李某某', '2018-04-17 11:09:00', 1),(NULL, '饭某某', '2018-04-20 13:09:00', 2),

(NULL, '赵', '2018-04-20 01:09:00', 4),(NULL, '倩', '2018-04-28 11:09:00', 2),(NULL, 'andy', '2018-04-30 11:09:00', 1),

(NULL, 'tony', '2018-05-08 11:09:00', 4),(NULL, 'tom', '2018-05-07 11:09:00', 3),(NULL, 'bill', '2018-05-18 11:09:00', 3),

(NULL, 'james', '2018-06-07 11:09:00', 4),(NULL, 'anthony', '2018-06-18 11:09:00', 2),(NULL, '盖茨', '2018-04-21 11:09:00', 1),

(NULL, '部长', '2018-04-24 11:09:00', 4),(NULL, '李总', '2018-04-20 11:09:00', 5),(NULL, '张总', '2018-04-29 11:09:00', 2),

(NULL, '王总', '2018-04-19 11:09:00', 3),(NULL, '唐总', '2018-05-01 11:09:00', 2)

参考的这篇文档Mysql排序方式


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6108599.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存