mysql排序操作

1,145 阅读2分钟

1. 基础操作

mysql单个字段降序排序:

select * from table order by `id` desc;

mysql单个字段升序排序:

select * from table order by `id` asc;

mysql多个字段排序:

select * from table order by `id` desc, `name` desc;

多字字段排序只需要添加多个排序条件,并且每个排序的条件之前用逗号分开。

order by `id` desc, `name` desc;

表示先按照id降序排序;如果id相同,按照name降序排序。

同理:

order by `id` desc, `name` asc;

表示先按照id降序排序;如果id相同,按照name升序排序。

2. 复杂排序

2.1 按照状态排序

要求按照以下顺序排序

审核中->审核拒绝->待放款->放款失败->待还款->已结清->已逾期

{
    id:80,
    label:'审核中'
},{
    id:100,
    label:'审核拒绝'
},{
    id:90,
    label:'待放款'
},{
    id:170,
    label:'放款失败'
}
,{
    id:175,
    label:'待还款'
}
,{
    id:200,
    label:'已结清'
}
,{
    id:180,
    label:'已逾期'
}

实现:

order by (CASE
        WHEN `status` = 80  THEN 0
        WHEN `status` = 100 THEN 1
        WHEN `status` = 90  THEN 2
        WHEN `status` = 170 THEN 3
        WHEN `status` = 175 THEN 4
        WHEN `status` = 200 THEN 5
        WHEN `status` = 180 THEN 6
        ELSE 7 END) ASC

2.2 根据不同状态实现不同排序方式

活动列表,排序要做如下修改:

  • 首先根据活动状态排序;进行中 => 未开始 => 已结束来排
  • 进行中,未开始的活动,要按“开始时间”的顺序来排
  • 已经结束的活动,要按“结束时间”的倒序来排
{
    id:1,
    label:'未开始'
},{
    id:2,
    label:'进行中'
},{
    id:3,
    label:'已结束'
}

实现

order by 
        -- 先对进行中的状态进行替换,然后按顺序排
        (CASE
        WHEN `status` = 2  THEN 0
        WHEN `status` = 1 THEN 1
        WHEN `status` = 3  THEN 2
        END) ASC,
        -- 然后对相应状态进行不同的排序处理
        CASE WHEN `status` = 1 or `status` = 2 THEN `create_time` END ASC
        CASE WHEN `status` = 3 THEN `modify_time` END DESC,

引用

  1. blog.csdn.net/qq_34889197…
  2. www.cnblogs.com/mlfz/p/1073…
  3. www.cnblogs.com/stsinghua/p…