Visualizzazione dei risultati da 1 a 9 su 9

Discussione: classifica [query]

  1. #1
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427

    classifica [query]

    Dovrei aggiungere a questa query un campo incrementale in grado di creare una classifica

    ovvero cosi :

    id_user SommaDivoto Pos
    1 20 1
    2 16 2
    4 14 3


    in questo momento quindi mi manca "Pos"

    codice:
    SELECT voti.id_user, Sum(voti.voto) AS SommaDivoto
    FROM voti
    GROUP BY voti.id_user;

  2. #2
    ma sei proprio sicuro che ti serva?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    ehilà...

    mi eviterebbe di scorrere tutto il record...
    per trovare la posizione di un utente

    se ho 500 utenti devo controllare la posizione del record ordinando la query in modo Ascendente...

    in quel caso invece basterebbe passare alla query l'id dell'utente e mi ritornerebbe la posizione.


    o sbaglio ? :master:

  4. #4
    aspetta che mi incasino....fai una select del tipo:

    codice:
    select voti.id_user, sum(voti.voto) as SommaDiVoto,
    (select count(t.id_user) from voti t where sum(t.voto)<sum(voti.voto) group by t.id_user order by sum(t.voto) asc) as Precedenti from voti group by voti.id_user order by SommaDiVoto desc

    se funziona (spero), la posizione dell'id-esimo user dovrebbe essere rs("Precedenti")+1

    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    la provo con calma....

    ti faccio sapere...

  6. #6
    ho fatto un pastrocchio (sia prima che ora)...se qualcuno me ne fa vedere una migliore è bravo ben venga (questa che 'posto con una decina di dati funziona)

    codice:
    SELECT t.*,
    (SELECT count(t1.id_user)+1 from (SELECT id_user, sum(voto) as SommaVoto from voti group by id_user order  by sum(voto) desc) t1 where t1.SommaVoto>t.SommaVoto) as Precedenti
    from (SELECT id_user, sum(voto) as SommaVoto from voti group by id_user order  by sum(voto) desc) t;

    dove la posizione dell'id-esimo user è proprio Precedenti
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    bravo ciccio...

    stavo provando la tua prima risposta...
    ma la subquery non andava...

    ora sembra che vada...
    grazie mille...

  8. #8
    Originariamente inviato da agenti
    bravo ciccio...
    quoto aggiungendo anche i miei complimenti;

    Originariamente inviato da agenti
    ............................
    ora sembra che vada...
    ...mi sembra però che abbia un piccolo difetto
    (probabilmente risolvibile utilizzando DISTINCT)
    che si manifesta in un caso come il seguente :

    codice:
    id_user --- sommavoti
      1     ---     1
      2     ---     2
      3     ---     2
      4     ---     3
    in cui il campo incrementale desiderato passerebbe da 2 a 4 saltando il 3

    sspintux

  9. #9
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    non mi fate venire coccoloni.... :|

    quindi la distinct dovrebbe stare qui ?


    codice:
    SELECT t.*,
    (SELECT DISTINCT count(t1.id_user)+1 from (SELECT id_user, sum(voto) as SommaVoto from voti group by id_user order  by sum(voto) desc) t1........ segue

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.