我有一个包含数据和一个类的表,类似
---------------- | DATA | Class | ---------------- | 1 | A | | 2 | A | | 5 | B | | 10 | A | | 2 | A | | 45 | B | | 90 | B | ----------------
我想交错两个类以获得类似的东西:
---------------- | DATA | Class | ---------------- | 1 | A | | 5 | B | | 2 | A | | 45 | B | | 2 | A | | 90 | B | | 10 | A | ----------------
我考虑过即时生成一个额外的列,该列将为每个单独的类添加一个顺序递增的索引并对该类进行排序,但是需要一个良好的方向/指针来做到这一点。
就像是:
----------------------- | DATA | Class | indx | ----------------------- | 1 | A | 1 | | 5 | B | 1 | | 2 | A | 2 | | 45 | B | 2 | | 2 | A | 3 | | 90 | B | 3 | | 10 | A | 4 | -----------------------
甚至可以只使用MySQL吗?
独立枚举每个类,然后按枚举排序:
select data, class, idx from (select a.*, (@seqnum := if(@class = class, @seqnum + 1, if(@class := class, 1, 1) ) ) as idx from atable a cross join (select @class := NULL, @seqnum := 0) vars order by class, data ) a order by idx, class;
编辑:
该查询独立地枚举每个类,因此数据最少的行的值为1,依此类推。为此,它正在使用MySQL变量。在其他数据库中,您将使用row_number()。进行枚举后,最后一步就是按该字段排序。
row_number()