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

したがって、後で元の順序を再作成することが可能になります。

あなたは今言うかもしれません: なぜあなたはid選択した場所を単に使わないのxyzですか? シンプル: はありませんid。データはユーザー入力であり、クエリ内でxyz人工的に作成したいと考えています。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 に答える