Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387

    [MySQL] Query per i primi 3 (ed oltre a pari merito)

    Ciao a tutti,
    chiedo aiuto per una query per estrarre i primi 3 record per punteggio più alto, ed eventualmente tutti gli altri laddove il quarto, quinto, n-esimo record siano " a pari merito".

    Partendo quindi da questa tabella

    codice:
    id         punteggio
    1          100
    2          200
    3          70
    4          100
    5          54
    6          201
    7          200
    A me servirebbe avere, anche se impostassi "LIMIT 3", questi record
    codice:
    id         punteggio
    6           201
    2           200
    7           200
    1           100
    4           100
    e quindi diventano 5, e non più 3.

    Ovviamente non conosco all'atto della query il minor punteggio a cui fermarmi, se no mettevo "WHERE punteggio >= 100"

    Spero di essere stato chiaro e ringrazio in anticipo!

  2. #2
    codice:
    SELECT id, punteggio
    FROM tabella
    WHERE punteggio IN (SELECT DISTINCT punteggio
                        FROM tabella
                        LIMIT 0,3
                        ORDER BY punteggio DESC
    ) ORDER BY punteggio DESC, id

  3. #3
    Prova così:

    codice:
    SELECT c.* FROM (
    SELECT min(b.punteggio) punteggio_min FROM (
    SELECT punteggio FROM t4
    ORDER BY punteggio desc limit 3
    ) b) b1, t4 c
    WHERE c.punteggio>=b1.punteggio_min
    dove t4 è il nome della tua tabella

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    Mi è cambiato lo scenario del database...

    Questa query la devo eseguire su una tabella cosi...

    codice:
    id          idPersona              punteggio
    1             1                        30
    2             1                        -10
    3             2                        50
    4             3                        60
    5             2                        -10
    6             3                        150
    7             1                        190
    Qunidi devo prima fare la somma del punteggio per ogni singolo e da li tirare fuori i primi 3 (o di più nel caso dei pari merito)

    Inoltre va joinata con tabella2 su idPersona... olè

    L'ho provata cosi ma mi sta facendo impazzire:


    codice:
    SELECT 	persone.nome,
    	SUM(transazioni.importoFinale) AS punti
    FROM	transazioni
    INNER JOIN persone ON persone.idPersona = transazioni.idPersona
    INNER JOIN 
    	
    	(SELECT	DISTINCT(SUM(transazioni.importoFinale)) AS punti,
    	persone.nome
    FROM	transazioni
    INNER JOIN persone on persone.idPersona = transazioni.idPersona
    GROUP BY persone.idPersona
    ORDER BY punti DESC
    LIMIT 3) subq ON transazioni.punti = subq.punti
    ORDER BY punti DESC
    (ci sono anche tante altre INNER JOIN ma non sto qui a riportarle)

    grazie intanto!

  5. #5
    Cambia così:

    SELECT c.* FROM (
    SELECT min(b.punteggio) punteggio_min FROM (
    SELECT punteggio FROM (
    select idPersona, sum(punteggio) as punteggio from t4
    group by idPersona
    ) a1
    ORDER BY punteggio desc limit 3
    ) b) b1,
    (select idPersona, sum(punteggio) as sum_punteggio from t4
    group by idPersona) c
    WHERE c.sum_punteggio>=b1.punteggio_min

    e per aggiungere altre tabelle in join prendi come esempio la tabella con alias d:

    SELECT c.* FROM (
    SELECT min(b.punteggio) punteggio_min FROM (
    SELECT punteggio FROM (
    select idPersona, sum(punteggio) as punteggio from t4
    group by idPersona
    ) a1
    ORDER BY punteggio desc limit 3
    ) b) b1,
    (select idPersona, sum(punteggio) as sum_punteggio from t4
    group by idPersona) c,
    t4 d

    WHERE c.sum_punteggio>=b1.punteggio_min and c.idPersona=d.idPersona

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.