MySql Order By 多個字段 排序規則

2021-08-06 05:47:00 字數 3201 閱讀 2467

database(17)

目錄(?)

[+]

建一測試表如下:

[sql]view plain

copy

create

table

`a` (  

`code` varchar

(255) 

default

null

,  `name

` varchar

(255) 

default

null

) engine=innodb default

charset=utf8;  

[sql]view plain

copy

insert

into

a values

('中一'

, '我'

);  

insert

into

a values

('中二'

, '你'

);  

insert

into

a values

('高一'

, '我是'

);  

insert

into

a values

('高二'

, '我們'

);  

insert

into

a values

('高二'

, '我的'

);  

測試語句如下:

[sql]view plain

copy

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

select

name

, hex(

name

) from

a order

byname

desc

結果如下:

name

hex(name)

我的e68891e79a84

我是e68891e698af

我們e68891e4bbac

我e68891

你e4bda0

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

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

[sql]view plain

copy

-- 按照name進行降序排序

select

* from

a order

byname

desc

;  -- 按照code進行降序排序

select

* from

a order

bycode 

desc

;  

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

code

name

高二我的

高一我是

高二我們中一我

中二你code

name

高二我們

高二我的

高一我是中二你

中一我

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

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

[sql]view plain

copy

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

select

* from

a order

bycode, 

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 排序效果依然無效。

我們在看看下面的語句

[sql]view plain

copy

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

select

* from

a order

bycode 

desc

, name

desc

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

select

code, 

name

from

a order

by1 

desc

, 2 

desc

;  

code

name

高二我的

高二我們

高一我是中二你

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

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

[sql]view plain

copy

select

* from

a order

byconcat(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 多個字段 排序規則

建一測試表如下 create table a code varchar 255 default null,name varchar 255 default null engine innodb default charset utf8 insert into a values 中一 我 insert...