当前位置: 代码网 > it编程>数据库>Mysql > MySQL自定义order by排序规则的示例详解

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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com