mysql order by =_MYSQL ORDER BY 使用 if 以及使用 IN

本文非原创,原文在这里

有如下表数据

+----+------+

| id | type |

+----+------+

| 1 | 1 |

| 2 | 1 |

| 3 | 1 |

| 4 | 2 |

| 5 | 2 |

| 6 | 3 |

| 7 | 3 |

| 8 | 4 |

| 9 | 4 |

| 10 | 4 |

+----+------+

使用 IF 语句

想要 type=3 的行排在前面,type为其他值的排在后面,可以这样写SQL:

SELECT * FROM test ORDER BY IF(type=3,0,1);

结果如下:

+----+------+

| id | type |

+----+------+

| 6 | 3 |

| 7 | 3 |

| 1 | 1 |

| 2 | 1 |

| 3 | 1 |

| 4 | 2 |

| 5 | 2 |

| 8 | 4 |

| 9 | 4 |

| 10 | 4 |

+----+------+

解释:

IF(type=3,0,1)的意思是,对 type 附加一个一个隐藏属性,这个隐藏属性,可以是0或者1,也就是对 type进行排序的时候,优先判断type是不是等于3,如果是,返回0,不是,返回1。然后对type隐藏属性进行排序,也就是对0和1进行排序。

也就是说,可以IF语句,看成一个独立的column,然后进行排序,你可以在IF语句后添加排序条件ASC或者DESC,当然,默认的排序是ASC,可以不写,上面的例子,加入你想让type=3的数据排在后面,就可以IF语句后面添加DESC了,如下:

SELECT * FROM test IF(type=3,0,1) DESC;

结果如下:

+----+------+

| id | type |

+----+------+

| 1 | 1 |

| 2 | 1 |

| 3 | 1 |

| 4 | 2 |

| 5 | 2 |

| 8 | 4 |

| 9 | 4 |

| 10 | 4 |

| 6 | 3 |

| 7 | 3 |

+----+------+

另外,你在进行隐藏属性优先排序的同时,对于剩下的排序,你也可以另外进行ASC或者DESC的排序

使用 IN 语句

上面的例子是满足单个条件,返回0 或者 1,如果需要用到一个范围呢?比如想让 type =2或者type=3的行排在前面呢?

可以使用 IN 语句

SELECT * FROM ORDER BY type IN(2,3) DESC

结果如下

+----+------+

| id | type |

+----+------+

| 4 | 2 |

| 5 | 2 |

| 6 | 3 |

| 7 | 3 |

| 1 | 1 |

| 2 | 1 |

| 3 | 1 |

| 8 | 4 |

| 9 | 4 |

| 10 | 4 |

+----+------+

上面 type IN(2,3) DESC, type IN 语句进行判断,如果type的值在(2,3)里面,返回1,否则返回0,所以,满足条件的数据,因为返回值是1,进行DESC排序的时候,就被放在在最后。

其他情况类推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值