gpt4 book ai didi

mysql - 交错 MySQL 表的行

转载 作者:行者123 更新时间:2023-11-29 01:40:26 27 4
gpt4 key购买 nike

我有一个包含数据和类的表,比如

----------------
| 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()。获得枚举后,最后一步就是按该字段排序。

关于mysql - 交错 MySQL 表的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647685/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com