所以,说我有这个数据
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)
答案 0 :(得分:0)
您可以这样处理
SELECT *
FROM `tablename`
ORDER BY
row_number() OVER (PARTITION BY `group` ORDER BY `group`), `group`
答案 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 |