
排序规则
源数据: 
目前我的 Sql:
SELECT * FROM test ORDER BY IF (age=24,0,1),id DESC; 查询效果: 
目前该表数据 117 万条: 
1 opengps 2020 年 5 月 26 日 via Android 你可以尝试用一个中间列过渡下,(盲猜,性能不确定) 把 24 的填充 1,非 24 的填充 2,然后的排序规则就是~ 第一排序中间列正序,第二排序 id 列倒序 |
2 CRVV 2020 年 5 月 26 日 via Android ORDER BY IF (age=24,-id,1),id DESC |
3 CRVV 2020 年 5 月 26 日 via Android 不过,有 100 多万行的话,这样也许会比较慢。 查一个 WHERE age = 24 再另查一个 age <> 24 可能快一些 |
4 luckyrayyy 2020 年 5 月 26 日 union?一个查询 24 一个查询非 24 然后一起展示 |
5 qjbcnrs OP |
6 kalok 2020 年 5 月 26 日 (SELECT * from test Where age = 24 Order By id ASC) Union All (SELECT * from test Where age != 24 Order By id DESC); |
7 qjbcnrs OP @kalok 试过了,不知为何,第二个排序会失效 <a href="https://sm.ms/image/wqi8nhHFOJoIyNR" target="_blank"><img src="https://i.loli.net/2020/05/26/wqi8nhHFOJoIyNR.png" ></a> |
8 kalok 2020 年 5 月 26 日 我懂了,Union 之后会打乱次序,那只有像做数学题那样,位移了。 SELECT * from test Order By (Case When age = 24 Then -100 + id ELSE 1000 - id END ) ASC; |
9 fy1993 2020 年 5 月 26 日 必须要用 sql 实现吗, 可不可以先取出全量 24 的数据到内存中通过程序排序, 然后同样方式取出其他数据也在内存中排序 |
10 daozhihun 2020 年 5 月 26 日 做个临时表拼在一起就可以了 |
11 CRVV 2020 年 5 月 26 日 via Android @zhongjun96 ORDER BY IF (age=24, id, 2147483647) ASC, id DESC 如果是别的数据库可以用 null 然后 asc nulls last,MySQL 不支持这么写,只能放一个大数字了 |
12 akira 2020 年 5 月 26 日 新加一列,sid , 如果 age=24 则 sid = 99999999 - id,否则 sid = id 。 然后按 sid 逆序排 |