首页 > 解决方案 > 按特定顺序对数据进行排序(mysql)

问题描述

所以,假设我有这些数据

id | value | group
1  | 100   | A
2  | 120   | A
3  | 150   | B
4  | 170   | B

我想对它进行排序,让它变成这样

id | value | group
1  | 100   | A
3  | 150   | B
2  | 120   | A
4  | 170   | B

会有比这更多的组,所以如果我将数据排序为(A,C,B,D,B,C,A)这样的组,它将变为(A,B,C,D,A,B,C )

标签: mysql

解决方案


您可以在表格中添加一个计数器列,该列将用于对表格进行排序:

select t.id, t.value, t.`group`
from (
  select t.id, t.value, t.`group`,
  (select count(*) from tablename 
   where `group` = t.`group` and id < t.id) counter
  from tablename t
) t
order by t.counter, t.`group`

请参阅演示
结果:

| id  | value | group |
| --- | ----- | ----- |
| 1   | 100   | A     |
| 3   | 150   | B     |
| 2   | 120   | A     |
| 4   | 170   | B     |

推荐阅读