按特定顺序对数据排序(mysql)

时间:2019-05-03 18:01:59

标签: 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)

2 个答案:

答案 0 :(得分:0)

您可以这样处理

SELECT *
FROM `tablename`
ORDER BY 
row_number() OVER (PARTITION BY `group` ORDER BY `group`), `group`

enter image description here

答案 1 :(得分:0)

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

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`

请参见demo
结果:

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