1

对不起,愚蠢的标题,但我根本不知道如何称呼它。

这就是我想要的。查看以下查询:

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        | ...

因此,之后可以重新创建原始订单。

现在你可能会说:为什么你不简单地使用idwhere you select xyz?很简单:没有idxyz数据是用户输入,我想在查询中创建一个人工输入id

谢谢你。

4

2 回答 2

1

SQL标准方式是:

select row_number() over (order by random()) as seqnum
from (your query goes here) t
order by 1

这使用窗口函数row_number()作为您的“迭代器”。然后它按指定的顺序返回行。

于 2013-02-28T02:12:58.593 回答
1

您应该能够使用row_number()(这是一个窗口函数)来分配您想要的“迭代器”。这将为每一行创建一个序列号:

select *
from
(
  select col,
     row_number() over(order by col) rn
  from yourtable
) src
order by random()

请参阅带有演示的 SQL Fiddle

于 2013-02-28T02:13:19.003 回答