voglio calcolare la Median di y
in sottogruppi di questa semplice xy_table
:SQL classifica query per calcolare ranghi e mediana in sottogruppi
x | y --groups--> gid | x | y --medians--> gid | x | y
------- ------------- -------------
0.1 | 4 0.0 | 0.1 | 4 0.0 | 0.1 | 4
0.2 | 3 0.0 | 0.2 | 3 | |
0.7 | 5 1.0 | 0.7 | 5 1.0 | 0.7 | 5
1.5 | 1 2.0 | 1.5 | 1 | |
1.9 | 6 2.0 | 1.9 | 6 | |
2.1 | 5 2.0 | 2.1 | 5 2.0 | 2.1 | 5
2.7 | 1 3.0 | 2.7 | 1 3.0 | 2.7 | 1
In questo esempio ogni x
è unico e la tabella è già ordinata per x
. Ora voglio GROUP BY round(x)
e ottenere la tupla che contiene la mediana di in ciascun gruppo.
posso già calcolare la mediana per l'intera tavola con questa classifica interrogazione:
SELECT a.x, a.y FROM xy_table a,xy_table b
WHERE a.y >= b.y
GROUP BY a.x, a.y
HAVING count(*) = (SELECT round((count(*)+1)/2) FROM xy_table)
uscita: 0.1, 4.0
ma ho fatto non ancora riescono a scrivere una query per calcolare la mediana per sub gruppi.
Attenzione: Non ho una funzione di aggregazione median()
disponibile. Si prega inoltre di non proporre soluzioni con speciali PARTITION
, RANK
o QUANTILE
dichiarazioni (come quelle trovate nello stesso esempio ma anche specifiche del fornitore SO questions). Ho bisogno SQL pianura (vale a dire, compatibile con SQLite senza median()
funzione)
Edit: realtà stavo cercando il Medoid e non il Median.
qual è la relazione tra 2a e 3a tabella nell'esempio? 1 ° 'gid' cambiato in 0.1 e né i valori di 'x' né' y' sono mediani per il gruppo 0.0 – Aprillion
Scusa se ho avuto un errore di battitura lì. La terza tabella dovrebbe presentare le mediane dei gruppi 'gid' (gruppo ID). E presumo che la mediana di [4,3] sia 4 (il valore maggiore) in questi casi. La mediana di [4,3] di – Juve
è in genere di 3,5 come suggerito nel primo paragrafo del tuo link wikipedia, vuoi esplicitamente ottenere il valore maggiore? – Aprillion