Ciao ragazzi, vorrei tradurre la seguente query in mysql:
select top 50 percent value
from tabella
order by value
non mi sembra che la LIMIT supporti le percentuali, quindi vi chiedo: come posso fare?
Ciao ragazzi, vorrei tradurre la seguente query in mysql:
select top 50 percent value
from tabella
order by value
non mi sembra che la LIMIT supporti le percentuali, quindi vi chiedo: come posso fare?
codice:select @limite := round(count(*) / 2) from tabella; prepare stmt from 'select * from tabella order by value desc limit ?'; execute stmt using @limite;
Sto cercando di calcolare la mediana. Ci sono riuscita nel caso si considerino righe di numero dispari ma sto avendo delle difficoltà nel caso in cui debba trattare righe di numero pari.
In giro ho trovato questa versione:
Non riesco a tradurlo in maniera funzionante per vedere se mi fornisce il risultato che vorrei! Mi date una mano?codice:select avg(valore) from (select valore from( select top 1 valore=valore *1.0 from (select top 50 percent valore from tabella order by valore )sub_a order by 1 desc )sub_1 union all select valore from( select top 50 percent valore from tabella order by valore desc )sub_b )median
![]()
Dai uno sguardo qui
http://stackoverflow.com/questions/1...ian-with-mysql
grazie per il link, ma purtroppo il codice mi restituisce null come risultato.
Non capisco il significato di:
HAVING SUM(SIGN(1-SIGN(y.val-x.val))) = (COUNT(*)+1)/2
e nello specifico di
SUM(SIGN(1-SIGN(y.val-x.val)))
![]()
Non ho provato tutte le soluzioni proposte. Ho verificato quella scritta da Franz K.
e mi sembra che funzioni perfettamente, restituendo un valore nel caso in cui il numero di record sia dispari o due nel caso sia pari.codice:SELECT x.id, x.val from data x, data y GROUP BY x.id, x.val HAVING SUM(SIGN(1-SIGN(IF(y.val-x.val=0 AND x.id != y.id, SIGN(x.id-y.id), y.val-x.val)))) IN (ROUND((COUNT(*))/2), ROUND((COUNT(*)+1)/2))
Ok, funziona nel caso i valori di "val" siano distinti.
Però, nel caso in cui i valori di "val" coincidono il funzionamento non è corretto. Mi spiego meglio: se ho
id val
1 2
2 1
3 3
4 21
5 4
6 5
7 7
8 5
anzichè restituirmi:
id val
5 4
6 5
mi restituisce:
id val
5 4
6 5
8 5
E nel caso:
id val
1 2
2 1
3 3
4 21
5 5
6 5
7 7
anzichè restituirmi:
id val
5 5
mi restituisce
id val
5 5
6 5
Sicuramente stai sbagliando qualcosa perchè la query restituisce le mediane corrette.![]()
E se volessi fare la stessa cosa che volevo fare con la media nel post:
http://forum.html.it/forum/showthrea...readid=1434418
come cambia il codice?
1) Non ho capito cosa vuoi fare.![]()
2) Prova un pò per conto tuo e poi se non riesci posta quanto hai fatto e dove ti blocchi. Finchè continui ad aspettare che ti venga fatto tutto dalla a alla z non imparerai niente.