gpt4 book ai didi

MySQL CTE - 是否可以迭代数字范围?

转载 作者:行者123 更新时间:2023-11-30 21:26:44 26 4
gpt4 key购买 nike

我很好奇是否可以使用 CTE 进行类似的查询(“id”的值可能会有所不同,不一定是连续的)

SELECT
elt((@mxId := if(@mxId + 1 <= 3, @mxId + 1, 1)), 5, 10, 22, 33) val,
id
FROM my_table
INNER JOIN (SELECT @mxId := 0) tmp;

预期输出:

 val | id
-----+----
5 | 1
10 | 2
22 | 3
5 | 4
10 | 5
22 | 6
5 | 7
10 | 8
22 | 9
5 | 10
10 | 11
22 | 12
5 | 13
10 | 14
22 | 15
5 | 16
10 | 17
22 | 18
5 | 19
10 | 20

最佳答案

with my_table_numbered as (
select ((row_number() over ())-1)%3 as rn_mod, id from my_table
)
select elt(rn_mod+1, 5, 10, 22, 33) as val, id
from my_table_numbered;

输出:

+------+----+
| val | id |
+------+----+
| 5 | 1 |
| 10 | 2 |
| 22 | 3 |
| 5 | 4 |
| 10 | 6 |
| 22 | 7 |
| 5 | 8 |
| 10 | 9 |
| 22 | 13 |
| 5 | 14 |
| 10 | 15 |
| 22 | 16 |
+------+----+

您应该在 CTE 中指定一个 ORDER BY 以获得有意义且可靠的行编号,但您在问题的查询中没有。

关于MySQL CTE - 是否可以迭代数字范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58550538/

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