MySql Order By 多個字段 排序規則

2021-07-16 23:01:45 字數 2261 閱讀 3503

建一測試表如下:

create table `a` (

`code` varchar(255) default null,

`name` varchar(255) default null

) engine=innodb default charset=utf8;

insert into a values('中一', '我');

insert into a values('中二', '你');

insert into a values('高一', '我是');

insert into a values('高二', '我們');

insert into a values('高二', '我的');

測試語句如下:

-- hex(): 獲取16進製制位元組碼

select name, hex(name) from a order by name desc

結果如下:

name

hex(name)

我的e68891e79a84

我是e68891e698af

我們e68891e4bbac

我e68891

你e4bda0

很明顯,mysql中的排序,是以位元組碼進行排序的,當第乙個字相同的時候,比較第二個字的位元組碼, 一次類推

有比較,才有想法,有比較才有進步,因此我們先把單字段的降序排序結果列出來,然後在看看兩個欄位的降序排序氣礦,我們就可以從中分析出其中道理來。

-- 按照name進行降序排序

select * from a order by name desc;

-- 按照code進行降序排序

select * from a order by code desc;

左邊是order by name desc, 右邊是order by code desc的結果

code

name

高二我的

高一我是

高二我們中一我

中二你code

name

高二我們

高二我的

高一我是中二你

中一我結果很明顯:單一字段排序的時候,其他字段出現的順序是自然排序的。

下面我們看看多字段的排序

-- 按照code, name進行降序排序

select * from a order by code, name desc;

code

name中一我

中二你高一我是

高二我的

高二我們

結果如下:首先謝謝qq_27837327和mjaytang 的,本人在這裡一次測試, 原文說這個sql排序無效的說法是錯誤的。實際上說order by code,name desc等同於order by code asc, name desc

經測試發現,select * from a order by code and name desc 排序效果依然無效。

我們在看看下面的語句

-- 按照code, name進行降序排序

select * from a order by code desc, name desc;

-- 該語句的效果等同於下面的語句, 其中1、2分別對應的是code、name

select code, name from a order by 1 desc, 2 desc;

code

name

高二我的

高二我們

高一我是中二你

中一我對比code,name的單個字段降序排序,我們可以發現, 使用 order by code desc, name desc的時候,mysql會先以code進行降序排序,在code進行降序排序該基礎上,再使用name進行降序排序。

另外我們還可以使用contat函式把多個字段拼接起來,在進行排序。但是要保證字段不能為null。下面我們來看一下concat的sql語句和結果。

select * from a order by concat(code,name) desc
code

name

高二我的

高二我們

高一我是中二你

中一我很明顯,在這個測試例子上來看, order by concat(code, name) desc的效果等同於 order by code desc, name desc

mysql order by多個字段

mysql order by 多欄位排序 mysql單個字段降序排序 select from table order by id desc mysql單個字段公升序排序 select from table order by id asc mysql多個字段排序 select from table o...

mysql order by多個字段排序

mysql order by 多個字段 排序規則 比如 如要根據configid和marketid來排序 有如下語句 select from table order by configid,marketid desc 那麼結果 分析 其實這個語句等同於 先按照configid公升序,再按照marke...

MySql Order By 多個字段 排序規則

database 17 目錄 建一測試表如下 sql view plain copy create table a code varchar 255 default null name varchar 255 default null engine innodb default charset ut...