Ho una tabella che ha una certa colonna numerica chiamata Score
. Vorrei eseguire una query su quella tabella, il cui risultato avrà 100 righe, ciascuna delle quali rappresenta il punteggio corrispondente a quel percentile. Ad esempio, il risultato può essere come segue:SQL: trovare percentili
Percentile | Score
---------------------
01 | 10
02 | 12
03 | 12
04 | 17
... | ...
99 | 1684
100 | 1685
I valori punteggio nella tabella dei risultati di cui sopra sono valori punteggio effettivo esistenti nella tabella originale, e non sono interpolati. Un risultato interpolato sarà migliore ma non è un requisito.
Possono esserci diverse euristiche che possono produrre un risultato simile. Quello che sto usando oggi (nel codice) è fondamentalmente il seguente: Il valore del punteggio corrispondente a un percentile sarà il valore del punteggio per il quale: il numero di righe con punteggi più piccoli, diviso per il numero totale di righe, arrotondato a un numero intero , pari al percentile (spero che sia chiaro)
posso prendere in considerazione altre euristiche se sono più facili da implementare
sto lavorando in MS-SQL, ma gradirebbe una soluzione che funziona anche su MySQL.
Qual è il modo migliore per raggiungere questo obiettivo?
io non sono sicuro se è migliore per attuare questo all'interno di SQL sé. – Amber
@Dav: non ne sono sicuro neanche io. Sto cercando di capire se è possibile in SQL, e quali sono le implicazioni sulle prestazioni. Con decine di milioni di record che non mantengo in memoria, forse SQL è il modo migliore. –
@Dav: un altro punto: se ritieni che non sia adatto per SQL e puoi eseguire il backup utilizzando argomenti concreti, questa è una ** risposta valida ** è la mia opinione. –