Ho bisogno di un approccio di classificazione T-SQL simile a quello fornito da NTILE(), tranne per il fatto che i membri di ciascuna tessera si troverebbero su una distribuzione scorrevole in modo che le tessere di livello più alto avere meno membriT-SQL: una migliore funzione di distribuzione scorrevole/query
Per esempio
CREATE TABLE #Rank_Table(
id int identity(1,1) not null,
hits bigint not null default 0,
PERCENTILE smallint null
)
--Slant the distribution of the data
INSERT INTO #Rank_Table (hits)
select CASE
when DATA > 9500 THEN DATA*30
WHEN data > 8000 THEN DATA*5
WHEN data < 7000 THEN DATA/3 +1
ELSE DATA
END
FROM
(select top 10000 (ABS(CHECKSUM(NewId())) % 99 +1) * (ABS(CHECKSUM(NewId())) % 99 +1) DATA
from master..spt_values t1
cross JOIN master..spt_values t2) exponential
Declare @hitsPerGroup as bigint
Declare @numGroups as smallint
set @numGroups=100
select @hitsPerGroup=SUM(hits)/(@numGroups -1) FROM #Rank_Table
select @hitsPerGroup HITS_PER_GROUP
--This is an even distribution
SELECT id,HITS, NTILE(@numGroups) Over (Order By HITS DESC) PERCENTILE
FROM #Rank_Table
GROUP by id, HITS
--This is my best attempt, but it skips groups because of the erratic distribution
select
T1.ID,
T1.hits,
T.RunningTotal/@hitsPerGroup + 1 TILE,
T.RunningTotal
FROM #Rank_Table T1
CROSS APPLY (Select SUM(hits) RunningTotal FROM #Rank_Table where hits <= T1.hits) T
order by T1.hits
DROP TABLE #Rank_Table
In #Rank_table, NTILE (@numGroups) crea una distribuzione uniforme di gruppi @numGroups. Quello di cui ho bisogno sono i gruppi @numGroups in cui la tessera 1 ha il minor numero di membri, la tessera 2 ne avrà uno o più della tessera 1, la piastrella 3 avrà 1 o più della tessera 2 ... la tessera 100 ne avrebbe di più.
Utilizzo SQL Server 2008. In pratica, questo verrà eseguito su una tabella permanente con potenzialmente milioni di righe per aggiornare periodicamente la colonna PERCENTILE con il percentile da 1 a 100.
Il mio tentativo migliore sopra salterà i percentili e si comporta male. Ci deve essere un modo migliore.
Le statistiche vengono utilizzate per descrivere un set di dati di grandi dimensioni in modo succinto che aiuta la comprensione. Dalle tue domande non è chiaro cosa stai cercando di fare o capire sul tuo set di dati. Le mediane, i percentili ecc sono ottimi per le normali distribuzioni e eliminano i valori anomali estremi con pochissime seccature. Sei sicuro di avere una distribuzione normale? Sembra più probabile che tu abbia una distribuzione esponenziale. Sarebbe più utile dire cosa stai cercando di capire sui tuoi dati piuttosto che chiedere informazioni sulle funzioni. –