欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

MySQL自定义order by排序规则的示例详解

2025年07月16日 Mysql
数据表create table tb_user( id bigint auto_increment primary key, name varchar(16)

数据表

create table tb_user
(
    id      bigint auto_increment
        primary key,
    name    varchar(16)  not null,
    age     int          not null,
    address varchar(128) null
);
insert into test.tb_user (id, name, age, address) values (1, '张三', 18, 'china');
insert into test.tb_user (id, name, age, address) values (2, '李四', 19, 'china');
insert into test.tb_user (id, name, age, address) values (3, 'jack', 20, 'america');
insert into test.tb_user (id, name, age, address) values (4, 'jane', 22, 'america');
insert into test.tb_user (id, name, age, address) values (5, 'pig', 19, 'japan');
insert into test.tb_user (id, name, age, address) values (6, 'cat', 22, 'japan');

一、使用field()函数自定义顺序

① 一个字段排序

优先china,其次america,最后japan

select
    name, address
from
    tb_user
order by
    field(address, 'china', 'america', 'japan') asc

asc可省略,如果有些数据不在指定范围内,则从最后开始按照默认排序

② 多个字段排序

先按照address升序排序,相同再按照name降序排序

select
    name, address
from
    tb_user
order by
    field(address, 'china', 'america', 'japan') asc,
    field(name, '李四', '张三', 'jane', 'jack') desc

二、使用case when自定义排序规则

① 一个字段

优先china,其次america,最后japan

select
    name, address
from
    tb_user
order by
    case address
        when 'china' then  1
        when 'america' then 2
        when 'japan' then 3
    end,
    address asc

asc可省略

② 多个字段

先按照address排序,相同再按照name排序

select
    name, address
from
    tb_user
order by
    case address
        when 'china' then  1
        when 'america' then 2
        when 'japan' then 3
    end,
    address asc,
    case name
        when '李四' then  1
        when '张三' then 2
        when 'jane' then 3
        when 'jack' then 4
    end,
    name desc

三、随机排序

使用rand()函数随机排序,不根据任何字段,每次的顺序都是随机的

select
    name, address
from
    tb_user
order by
    rand()

到此这篇关于mysql自定义order by排序规则的示例详解的文章就介绍到这了,更多相关mysql order by内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!