gpt4 book ai didi

mysql - 如何通过交替 (0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,...) 行来排序结果

转载 作者:行者123 更新时间:2023-11-29 02:38:48 24 4
gpt4 key购买 nike

我使用 MySQL 执行数据库事务,使用 PHP 运行 MySQL 查询。我想使用 is_free 列的值 (0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,... ).对于 is_free 列的值,我想按 3:6 的比例获取记录。

有什么方法可以实现吗?

我搜索了不同的算法,但没有找到符合我要求的算法。我找到了唯一一个通过替代记录抛出结果的查询,但我的要求没有得到满足。

我希望这样的输出

id     is_free
-- -------
1 0
2 0
3 0
4 1
5 1
6 1
7 1
8 1
9 1
10 0
11 0
12 0

最佳答案

您需要类似于 ROW_NUMBER() OVER (PARTITION BY is_free ORDER BY id) 的内容。获得每个分区的行号后(例如 0-0、0-1、0-2、0-3、...、1-0、1-1、1-2、1-3、... ) 您可以使用基础数学对结果进行排序(值 0-0...0-2 和 1-0...1-5 先行,0-3...0-5 和 1-6... 1-11 第二,依此类推)。不幸的是,MySQL 5.x 不支持窗口函数,因此您需要使用某种技巧来计算行号。这是一个:

SELECT *
, rn div IF(is_free = 1, 6, 3) AS gn
FROM (
SELECT id
, is_free
, (SELECT COUNT(*) FROM t AS x WHERE x.id < t.id AND x.is_free = t.is_free) AS rn
FROM t
) AS x
ORDER BY gn, is_free

Demo on db<>fiddle

关于mysql - 如何通过交替 (0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,...) 行来排序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766747/

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