mysql数据怎么排序_mysql排序数据

一:order by的普通使用

1.介绍

当使用SELECT语句查询表中的数据时,结果集不按任何顺序进行排序。要对结果集进行排序,请使用ORDER BY子句。

ORDER BY子句允许:

对单个列或多个列排序结果集。

按升序或降序对不同列的结果集进行排序。

使用方式:

SELECT column1, column2,...

FROMtbl

ORDERBY column1 [ASC|DESC], column2 [ASC|DESC],...

2.按照列进行排序

SELECT

contactLastname,

contactFirstname

FROM

customers

ORDER BY

contactLastname DESC,

contactFirstname ASC;

9eaa8e8c7616f56015c162ccb8b1b5ed.png

在上面的查询中,ORDER BY子句首先按照contactLastname列降序对结果集进行排序,然后按照contactFirstname列升序对排序结果集进行排序,以生成最终结果集。

3.按照表达式进行排序

ORDER BY子句还允许您根据表达式对结果集进行排序

SELECT

ordernumber,

orderlinenumber,

quantityOrdered * priceEach

FROM

orderdetails

ORDER BY

ordernumber,

orderLineNumber,

quantityOrdered * priceEach;

bbc8688a3246c2f5a0d747cc8816fb69.png

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');

3d8f62598cc419603bd35810a0edd109.png

注意的是FIELD函数中又一个status字段。

二:order by用自然语言排序

1.新建表

CREATE TABLE IF NOT EXISTS items (

id INT AUTO_INCREMENT PRIMARY KEY,

item_no VARCHAR(255) NOT NULL

);

cd72e99dfb3aea438256b9dd6eabf4eb.png

2.插入数据

INSERT INTO items(item_no)

VALUES ('1'),

('1C'),

('10Z'),

('2A'),

('2'),

('3C'),

('20D');

63bb0a5407ed3e829c62454050860b49.png

3.查询结果

当我们查询选择数据并按item_no排序时,得到以下结果:

SELECT

item_no

FROM

items

ORDER BY item_no;

4f986497f2c2a8231e6d3f7d3dd1edf1.png

因为这是自然排序。

4.解决方式

为了克服这个问题,首先我们将item_no列分成两列:prefix 和 suffix。 prefix列存储item_no的数字部分,suffix列存储字母部分。然后根据这些列对数据进行排序。

SELECT

item_no

FROM

items

ORDER BY CAST(item_no AS UNSIGNED) , item_no;

1d2cdfcd41730bb0f280cd66790a6c2a.png

在这个查询中,首先使用类型转换将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');

自然排序:

cbd6fe88c23f418dbeeb596d8a57dce8.png

6.解决方式

SELECT

item_no

FROM

items

ORDER BY LENGTH(item_no) , item_no;

6e2d30b34d0d139ead4abddadfaaed35.png

为了得到上面这个结果,可以使用LENGTH函数。 请注意,LENGTH函数返回字符串的长度。 这个做法是首先对item_no数据进行排序,然后按列值排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值