私はこの再帰的なSQL機能を使用しようとしていますが、私が望むことをやり遂げることはできません。私は、私が使用したテーブルの更新スタイルではなく、単一の再帰的なSQLクエリに変換できるかどうかを尋ねて、アンロールされたループでロジックをコーディングしました。Oracle Recursive Subquery Factoring convert
http://sqlfiddle.com/#!4/b7217/1
ランク付けする6人の選手があります。彼らはID、グループID、スコアとランクを持っています。私は最高の初期のスコアで、人を取り、彼らにランク1を与えたい
初期状態
+----+--------+-------+--------+
| id | grp_id | score | rank |
+----+--------+-------+--------+
| 1 | 1 | 100 | (null) |
| 2 | 1 | 90 | (null) |
| 3 | 1 | 70 | (null) |
| 4 | 2 | 95 | (null) |
| 5 | 2 | 70 | (null) |
| 6 | 2 | 60 | (null) |
+----+--------+-------+--------+
は、それから私は、同じグループIDを持つすべての人のスコアに10個のボーナスポイントを適用します。一番高い順位を取ってランク2を割り当て、ボーナスポイントを分配するなど、プレーヤーが残らなくなるまで続きます。
ユーザーIDが結びついています。
ボーナスポイントはランキングを変更します。 id = 4は最初は95で2位、100でリーダーの後ろに10 ptsボーナス、id = 2は上に移動してその場所を取る。
最終状態
+-----+---------+--------+------+
| ID | GRP_ID | SCORE | RANK |
+-----+---------+--------+------+
| 1 | 1 | 100 | 1 |
| 2 | 1 | 100 | 2 |
| 4 | 2 | 95 | 3 |
| 3 | 1 | 90 | 4 |
| 5 | 2 | 80 | 5 |
| 6 | 2 | 80 | 6 |
+-----+---------+--------+------+