Classifica squadre

di il
13 risposte

Classifica squadre

Buongiorno,

devo creare una classifica raggruppata per squadre che vada a prendermi i 2 punteggi più alti di ogni squadra.

Mi spiego meglio, ogni squadra può essere composta da N atleti, ma solo i 2 punteggi più alti di ogni squadra vanno a fare la classifica finale per squadra.

quindi avrò:

atleta

squadra

totale

Atleta 1 

Squadra 1

25

Atleta 2 

Squadra 1

15

Atleta 3 

Squadra 1

5

Atleta 4 

Squadra 2

20

Atleta 5 

Squadra 2

5

Quindi la mia classifica finale sarà così:

squadra 

totale

Squadra 1

40 ( 25+15)

Squadra 2

25 (20+5)

Grazie a chi mi può essere d'aiuto.

13 Risposte

  • Re: Classifica squadre

    Prova a dare una prima occhiata qui

    Trovare i record con i primi o gli ultimi valori in un gruppo o in un campo - Supporto tecnico Microsoft

  • Re: Classifica squadre

    select rank.squadra, sum(rank.totale) as TOT
    from
    (
    SELECT punti.squadra, punti.atleta, punti.totale
    FROM punti LEFT JOIN punti AS punti_1 ON punti.squadra = punti_1.squadra
    GROUP BY punti.squadra, punti.atleta, punti.totale
    HAVING ((((Count(1)-Sum(IIf([punti].[totale]>[punti_1].[totale],1,0))))<3))
    ) as Rank
    Group by Rank.Squadra
  • Re: Classifica squadre

    Ma funziona solo se non hai parimeriti 

    io opterei per un bel ciclo vba che compila una temp_table

    cicli per squadra ordinato per punteggio decrescente degli atleti e prendi solo i primi 2, li sommi ed metti il risultato in un record della temp 

  • Re: Classifica squadre

    Hm… soluzione casareccia.

    Query per squadra con ordinamento decrescente del punteggio, usando il select top 2.

    Del tipo:

    Select top 2 punteggio, giocatori from squadre order by punteggio

    La sintassi della query è scritta male, ma è solo per fare un esempio. Puoi aggiungere direttamente la somma, oppure usarla su una form e poi sommare. Ma il concetto è ordinare in modo decrescente e prelevare i due valori al top della ricerca.

  • Re: Classifica squadre

    La top 2 non la applichi ai gruppi

    dici casereccia… scrivilo l'sql con la top2 per gruppi

  • Re: Classifica squadre

    Infatti non ho fatto riferimento a nessun gruppo.

    È chiaro che bisogna mettere delle condizioni ed usare il vba per stilare la classifica. 

    Era solo per far presente l uso del select top che semplifica le cose  

  • Re: Classifica squadre

    Si ma non è questo il caso d'uso.

    Se parli di casereccia lasci pochi dubbi di interpretazione, presupponendo che ci siano vie migliori di quanto ho già suggerito … e la top2 non è tra queste.

    Quindi se ne hai altre da "tentare" prego, magari è la volta (e capita) che imparo altro e nel caso ti ringrazierò, diversamente lascia commenti spiccioli e forse frettolosi per te

  • Re: Classifica squadre

    03/03/2023 - muttley005 ha scritto:


    Ma funziona solo se non hai parimeriti 

    io opterei per un bel ciclo vba che compila una temp_table

    cicli per squadra ordinato per punteggio decrescente degli atleti e prendi solo i primi 2, li sommi ed metti il risultato in un record della temp 

    Scusami ma qui che cosa hai detto? Ho capito male?  

    Quando li hai ordinati in modo decrescente, cosa ti impedisce di usare il top?

  • Re: Classifica squadre

    Hai detto che la mia risposta era una soluzione casereccia … io nn vedo alternative a quelle che ho proposto.

    Se NON c'è possibilità di parimerito allora l'SQL funziona correttamente

    Se invece c'è ho proposto il codice col ciclo per squadra e prendendo i primi 2 

    è casereccia? hai altri modi?

  • Re: Classifica squadre

    Ma no. Non la tua soluzione. È la mia proposta che è casareccia!!

    la tua è una query di totalizzazione, non è di certo casareccia  .

    Ed inoltre anche con il top 2 si incorre nel problema dei parimerito.

    Anche se non sussiste. Anche se parimerito sono sempre i due valori più alti

  • Re: Classifica squadre

    Allora era quantomeno fraintendibile

    fine della discussione

  • Re: Classifica squadre

    03/03/2023 - muttley005 ha scritto:


    Allora era quantomeno fraintendibile

    fine della discussione

    Effettivamente hai ragione. 

    Ho impostato male il discorso.

    Se avessi scritto “ti propongo..” sicuramente sarei stato più chiaro.

  • Re: Classifica squadre

    Ciao , presupponendo di avere :

    Tabella squadre :  “Tbl_squadre” 

    Tabella Classifica : “Tbl_classifica”  è la tabella che hai pubblicato

    Tabella temp dove scriverò i top 2 :  “Tbl_CLASSIFICA_TOP_2”

    Private Sub CmdCalcolaTop2_Click()
    
    Dim SquadraID As Integer
    Dim db As DAO.Database
    Set db = CurrentDb()
    
    DoCmd.RunSQL " DELETE * FROM Tbl_CLASSIFICA_TOP_2" 'Azzero tabella temporanea
    
    Dim rs1 As DAO.Recordset 
    Set rs1 = db.OpenRecordset("Tbl_Squadre", dbOpenTable) 
      Do Until rs1.EOF
       SquadraID = (rs1!ID)
       'estraggo i top 2 e li accodo a temp
       DoCmd.RunSQL "INSERT INTO Tbl_CLASSIFICA_TOP_2 SELECT TOP 2 Punti , ID_Squadra , Atleta FROM Tbl_CLASSIFICA WHERE ID_Squadra= " & SquadraID & " ORDER BY Punti DESC ;" 
     
      rs1.MoveNext
      Loop
    rs1.Close
    Set rs1 = Nothing
    Set db = Nothing
    End Sub

    Poi ti vai a leggere i dati della tabella temp..

Devi accedere o registrarti per scrivere nel forum
13 risposte