mysql排序数据
Posted 曹军
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql排序数据相关的知识,希望对你有一定的参考价值。
一:order by的普通使用
1.介绍
当使用SELECT语句查询表中的数据时,结果集不按任何顺序进行排序。要对结果集进行排序,请使用ORDER BY子句。
ORDER BY子句允许:
对单个列或多个列排序结果集。
按升序或降序对不同列的结果集进行排序。
使用方式:
SELECT column1, column2,...
FROM
tbl
ORDER
BY column1 [ASC|DESC], column2 [ASC|DESC],...
2.按照列进行排序
SELECT
contactLastname,
contactFirstname
FROM
customers
ORDER BY
contactLastname DESC,
contactFirstname ASC;
在上面的查询中,ORDER BY
子句首先按照contactLastname
列降序对结果集进行排序,然后按照contactFirstname
列升序对排序结果集进行排序,以生成最终结果集。
3.按照表达式进行排序
ORDER BY
子句还允许您根据表达式对结果集进行排序
SELECT
ordernumber,
orderlinenumber,
quantityOrdered * priceEach
FROM
orderdetails
ORDER BY
ordernumber,
orderLineNumber,
quantityOrdered * priceEach;
4.order by 与自定义排序
ORDER BY
子句允许使用FIELD()
函数为列中的值定义自己的自定义排序顺序。
如果要按以下顺序基于以下状态的值对订单进行排序:
In Process
On Hold
Cancelled
Resolved
Disputed
Shipped
可以使用FIELD()
函数将这些值映射到数值列表,并使用数字进行排序; 请参阅以下查询:
SELECT
orderNumber, status
FROM
orders
ORDER BY FIELD(status,
\'In Process\',
\'On Hold\',
\'Cancelled\',
\'Resolved\',
\'Disputed\',
\'Shipped\');
注意的是FIELD函数中又一个status字段。
二:order by用自然语言排序
1.新建表
CREATE TABLE IF NOT EXISTS items (
id INT AUTO_INCREMENT PRIMARY KEY,
item_no VARCHAR(255) NOT NULL
);
2.插入数据
INSERT INTO items(item_no)
VALUES (\'1\'),
(\'1C\'),
(\'10Z\'),
(\'2A\'),
(\'2\'),
(\'3C\'),
(\'20D\');
3.查询结果
当我们查询选择数据并按item_no
排序时,得到以下结果:
SELECT
item_no
FROM
items
ORDER BY item_no;
因为这是自然排序。
4.解决方式
为了克服这个问题,首先我们将item_no
列分成两列:prefix
和 suffix
。 prefix
列存储item_no
的数字部分,suffix
列存储字母部分。然后根据这些列对数据进行排序。
SELECT
item_no
FROM
items
ORDER BY CAST(item_no AS UNSIGNED) , item_no;
在这个查询中,首先使用类型转换将item_no
数据转换为无符号整数。 其次,使用ORDER BY
子句对数字进行数字排序,然后按字母顺序排列。
5.下一个例子
如果删除表:drop table items
现在清空表:drop table items
添加数据:
INSERT INTO items(item_no)
VALUES(\'A-1\'),
(\'A-2\'),
(\'A-3\'),
(\'A-4\'),
(\'A-5\'),
(\'A-10\'),
(\'A-11\'),
(\'A-20\'),
(\'A-30\');
自然排序:
6.解决方式
SELECT
item_no
FROM
items
ORDER BY LENGTH(item_no) , item_no;
为了得到上面这个结果,可以使用LENGTH函数。 请注意,LENGTH函数返回字符串的长度。 这个做法是首先对item_no
数据进行排序,然后按列值排序
以上是关于mysql排序数据的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段