Originariamente inviato da cyberclown72
Allora la situazione è la seguente:
ho una tabella con un ID, nome, cognome, punti e gara (all'interno di questo campo - visto che la suddivisione deve avvenire per anno ogni gara è codificata AAAA01, AAAA02, AAAA03 ecc.)
Visto che non tutti i partecipanti possono gareggiare a tutte le gare si è deciso - per livellare la classifica - di eliminare il punteggio più basso ogni quattro gare svolte (quindi se si fanno 12 gare annue bisogna togliere gli ultimi 3 punteggi minori).
Un esempio di seguito

Gara 1 Tizio punti 25
Caio punti 20
Sempronio punti 15

Gara 2 Sempronio punti 25
Caio punti 20
Pluto punti 15

Gara 3 Pippo punti 25
Sempronio punti 20
Caio punti 15

Gara 4 Pluto punti 25
Tizio punti 20
Caio punti 15


Estraendo con la query che postato in precedenza il risultato sarebbe il seguente

Caio punti 70
Sempronio punti 60
Tizio punti 45
Pluto punti 40
Pippo punti 25

Invece dovrebbe essere così: Caio punti 55 (ha partecipato a 4 gare e si toglie uno dei risultati peggiori quindi 15 punti) mentre a tutti gli altri verrebbe tolto 0 (visto che non hanno partecipato a tutte le gare e quindi il risultato peggiore sarebbe appunto uguale a 0).

La nuova classifica dovrebbe quindi essere la seguente

Sempronio punti 60
Caio punti 55
Tizio punti 45
Pluto punti 40
Pippo punti 25

Ora vorrei sapere come riuscirci modificando la query postata oppure creandone una ex novo.

Spero di essere stato più chiaro rispetto ai precedenti post.
Prova così

codice:
set @nome := "", @num := 1;
select nome,sum(punti) as totale from (
select * from (
select *,
   @num := if(@nome = nome, @num + 1, 1) as riga_numero,
   @nome := nome as pippo
from tabella
order by nome asc, punti desc) as tab where riga_numero <= 3) as tab
group by nome
order by totale desc


edit. Se può interessarti ho preso spunto da questa mia vecchia discussione:

http://forum.html.it/forum/showthrea...ght=tot+gruppo