Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [sql] classifica con posizioni ripetue

    Salve a tutti,

    ho una serie di righe in una tabella che rappresentano alcune squadre. Vengono ordinate, per creare la classifica, secondo i criteri:

    1. punteggio
    2. vittorie
    3. pareggi
    4. sconfitte

    Questa classifica viene creata ogni volta che finisce un turno.

    Alle prime tre di ogni turno devo dare un bonus.

    Problema: come faccio se a uno dei primi tre posti c'è più di una squadra? Il ciclo while che conta la posizione le classificherà in modo diverso ma magari hanno tutti e 4 i criteri perfettamente uguali (e quindi meritano lo stesso bonus).

    Vi viene in mente un modo per risolvere la cosa? Come fareste?
    Grazie a chi mi risponderà
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    ...... Come fareste? ........
    Prima di risolvere con SQL decidiamo come risolvere il problema nella vita pratica

    2 atleti in corsa arrivano entrambi primi con lo stesso identico tempo
    ma la coppa è una sola
    a chi la diamo ?????

    .

  3. #3
    Ma non è lo stesso problema. Posso anche dare il primo post ex aequo Forse classifica è un termine impreciso ma l'ho usato per farmi capire
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quindi non vuoi pescare
    - le prime 3 squadre
    bensi:
    - i primi 3 punteggi (indipendentemente da quante squadre possano esserci in un singolo punteggio)
    Esatto ?????

    Potrebbe bastare una SELECT ben architettata (ma fra pochi minuti devo andare a lavoro)
    pero nel #1 hai fatto riferimento a un ciclo WHILE ?????

    Adesso devo andare, ne riparliamo stasera se non arrivano altri contributi

    .

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Ho recuperato qualche minuto ......
    forse cosi ?
    codice:
    SELECT 
    Tab1.Squadra, 
    Tab1.Punteggio
    FROM 
    Tab1
    WHERE (Tab1.Punteggio In (SELECT DISTINCT TOP 3 Tab1.Punteggio FROM Tab1 ORDER BY Tab1.Punteggio DESC))
    ;

  6. #6
    di che db stiamo parlando? la rispota potrebbe variare, è per questo che il regolamento richiede che venga indicato

  7. #7
    chiedo scusa, credevo di poter trovare una soluzione usando sql (come avevo indicato nel titolo).
    In ogni caso si tratta di mysql.

    Grazie nman non ci avevo pensato a fare una subquery! In effetti l'idea è proprio quella (Mysql supporta TOP? Posso fare la stessa cosa con LIMIT, vero?)


    edit: Mi riferivo al ciclo while perché calcolo la classifica in modo statico. A fine turno prendo i risultati li ordino e assegno alla squadra la posizione nel turno in un campo nel database (mi serve altrove).
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  8. #8
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Optime ha ragione a chiedere la indicazione del DB
    Quote Originariamente inviata da Nunkij Visualizza il messaggio
    .....Mysql supporta TOP? Posso fare la stessa cosa con LIMIT, vero?.......
    Con MySql devi usare LIMIT ma pero puoi migliorare la query
    perché il LIMIT (diversamente da TOP ) accetta 2 parametri
    e quindi puoi individuare con esattezza il 3° record e
    d evitare di usare "In" che è notoriamente dispendioso

    quindi più o meno sarebbe (scritta a braccio) :
    WHERE (Tab1.Punteggio > (SELECT DISTINCT Tab1.Punteggio FROM Tab1 LIMIT 1,3 ORDER BY Tab1.Punteggio DESC ))

    Poi se qualcosa non và allora occorre qualcuno "specializzato" in MySql

    .
    Ultima modifica di nman; 06-06-2017 a 12:32

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 © 2025 vBulletin Solutions, Inc. All rights reserved.