mysql中的order语句_【MySql】1.2 mysql中 Order By 语句的用法

一、用法介绍

Order by语句是用来排序的,默认为升序排序(即:从1到9,从a到z),order by desc为降序排序(即:从9到1,从z到a)

SELECT column_name(s)

FROM table_name

ORDER BY column_name DESC

例:

mysql> select * from mysql_order_by_test order by uid asc;

+-----+-------+-----+

| uid | name| sex |

+-----+-------+-----+

|1 | ZHANG |1 |

|2 | LI|2 |

|3 | WANG|1 |

+-----+-------+-----+

3 rows in set (0.00sec)

这条语句是按照uid正序查询数据,也就是按照uid从小到大排列

例:

mysql> select * from mysql_order_by_test order by uid desc;

+-----+-------+-----+

| uid | name| sex |

+-----+-------+-----+

|3 | WANG|1 |

|2 | LI|2 |

|1 | ZHANG |1 |

+-----+-------+-----+

3 rows in set (0.00sec)

MySQL Order By根据两列进行分类:

很多时候,我们需要同时根据两列内容(或者更多列)来对数据进行分类。当指定的列数多于一列时,仅在第一列的值完全相同时才参考第二列:

SELECT column_name(s)

FROM table_name

ORDER BY column_name1, column_name2

二、mysql "group by"与"order by"的研究

1.先创建一个表,并添加数据

CREATE TABLE `test` (

`id` INT(10) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(255) NOT NULL,

`category_id` INT(10) NOT NULL,

`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 默认值为当前系统时间

PRIMARY KEY (`id`)

)

ENGINE=MyISAM ROW_FORMAT=DEFAULT;

INSERT INTO `test` (`id`, `name`, `category_id`, `date`) VALUES

(1, 'aaa', 1, '2010-06-10 19:14:37'),

(2, 'bbb', 2, '2010-06-10 19:14:55'),

(3, 'ccc', 1, '2010-06-10 19:16:02'),

(4, 'ddd', 1, '2010-06-10 19:16:15'),

(5, 'eee', 2, '2010-06-10 19:16:35');

347d56afad76a4f47e07dc5a715b1aa8.png

现在需要取出每个分类中最新的内容:

(1)如果select * from test group by category_id order by `date`,结果:

79c27bb0b23ff3c8516f235d8079d16c.png

明显,这不是想要的数据,原因是只从分组后的每个组里取得了第一条信息,分析如下:

282b2f4c524df371c3827599be210b1d.png

51b272fc184debad2e9d86cde3fcae0c.png

2.根据上面的分析,有两个解决方法:

(1)where+group by(对小组进行排序)

分析分组后的结构:idcategory_id

11

31

41

idcategory_id

22

52

对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但该函数的作

用是将小组里的字段里的值进行串联起来。

select group_concat(id order by `date` desc) from `test` group by category_id;

1d7c3384d20091f9c49843f673f35afc.png

select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test`

group by category_id

86c3239fae84b6b860dae3caf1156f93.png

select * from test where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id) order by date desc;

f78470db02bf6b88d66dc1270cc37eaf.png

(2)从from返回的数据下手脚(即用子查询)

select * from `test` order by `date` desc

703017a49214d405921971f398494545.png

分析分组后的结构:idcategory_id

52

22

idcategory_id

41

31

11

select * from (select * from `test` order by `date` desc) `temp`

group by category_id order by `date` desc

e7715752a7cd951e424eb75a477663e5.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值