抱歉这个愚蠢的标题,但我只是不知道如何调用它。
这就是我想要的。查看以下查询:
SELECT *
FROM (
SELECT xyz
)
JOIN ...
ORDER BY RANDOM()
我想知道查询结束时 xyz
行的初始顺序。所以我想到了这样的事情(伪SQL):
iterator = 1;
SELECT *
FROM (
SELECT iterator++, xyz
)
JOIN ...
ORDER BY RANDOM()
所以之后我的结果集将如下所示:
iterator | some other data
--------------------------
5 | ...
1 | ...
6 | ...
8 | ...
4 | ...
2 | ...
7 | ...
3 | ...
因此之后可以重新创建原始订单。
现在您可能会说:为什么不在选择 xyz
的地方简单地使用 id
?很简单:没有 id
。 xyz
数据是用户输入,我想在查询中为它创建一个人工 id
。
谢谢。
最佳答案
您应该能够使用 row_number()
(这是一个 windowing function )来分配您想要的“迭代器”。这将为每一行创建一个序列号:
select *
from
(
select col,
row_number() over(order by col) rn
from yourtable
) src
order by random()
关于sql - 如何为给定的一组行创建某种迭代器(或人工 ID)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15126254/