Sto cercando di utilizzare questa funzione SQL ricorsiva ma non riesco a farlo fare ciò che voglio, nemmeno vicino. Ho codificato la logica in un ciclo srotolato, chiedendo se può essere convertita in una singola query SQL ricorsiva, non lo stile di aggiornamento della tabella che ho usato.Convertitore di subquery Oracle Recursive convert
http://sqlfiddle.com/#!4/b7217/1
ci sono sei giocatori per essere ordinati. Hanno id, ID gruppo, punteggio e classifica.
Stato iniziale
+----+--------+-------+--------+
| 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) |
+----+--------+-------+--------+
voglio prendere la persona con il più alto punteggio iniziale e dare loro rango 1. Poi ho applicare 10 punti bonus per il punteggio di tutti coloro che hanno lo stesso ID gruppo. Prendi il livello più alto, assegna il grado 2, distribuisci punti bonus e così via fino a quando non ci sono giocatori rimasti.
L'ID utente rompe i legami.
I punti bonus cambiano la classifica. id = 4 inizialmente sembra essere in seconda posizione con 95, dietro il leader con 100 ma con il bonus di 10 punti, id = 2 si alza e prende il posto.
stato finale
+-----+---------+--------+------+
| 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 |
+-----+---------+--------+------+