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

    [mysql] Selezione dei massimi

    Ciao a tutti.

    Sono almeno due ore che impazzisco su una query e non riesco a venirne a capo, mi appello a voi

    io ho una tabella(prototipo) di questo genere:

    SERIAL USER
    serial1 paperino
    serial1 pippo
    serial1 pippo
    serial1 pluto
    serial2 mario
    serial2 mario
    serial2 rossi
    serial2 rossi
    serial2 rossi

    L'obiettivo è di sputare fuori quale user ha effettuato il maggior numero di accessi abbinato ad un serial.
    Il massimo sarebbe anche avere un "Errore" nel caso in cui due o più user siano a pari merito.

    Io ho fatto questa query che nella mia testa funziona e anche cercando su internet le varie guide mysql sembra essere corretta ma mi da un output non conforme.

    codice:
    SELECT SERIAL,USER FROM ( 	SELECT *,COUNT(*) as Accessi 	FROM `AD`  	GROUP BY SERIAL,USER) AS ADn GROUP BY SERIAL HAVING MAX(Accessi)
    il risultato di questa query è:

    SERIAL USER
    serial1 paperino
    serial2 mario

    mentre, data la condizione HAVING MAX(Accessi) io mi aspetterei:

    SERIAL USER
    serial1 pippo
    serial2 rossi

    dove sto sbagliando??

    grazie mille a tutti, so che mi risolverete l'enigma in men che non si dica!!! =)

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select t1.serial,t2.user,t2.maggiore
    from tabella as t1
    inner join (
    		select serial,user,count(user) as maggiore
    		from tabella
    		group by serial,user
    		order by maggiore desc
    	    ) as t2
    on t1.serial = t2.serial 
    group by t1.serial

  3. #3
    testata e funzionante!!! grazie mille... ora non mi resta che capirla... =)

    grazie ancora!! =)

  4. #4
    ok, capita... solo una cosa non mi è molta chiara... perchè l'order by desc?? è essenziale ai fini del funzionamento? se si, perchè?

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da Giampy86
    ok, capita... solo una cosa non mi è molta chiara... perchè l'order by desc?? è essenziale ai fini del funzionamento? se si, perchè?
    L'order by desc ti serve perchè il group by seguente estrarrà la prima riga che trova per ciascun seriale che deve essere quella col conteggio maggiore.

  6. #6
    okok, ora ho capito... ma, senti un pò... io ho provato a mandare la tua query... peccato che sulla tabella reale mi sono scocciato dp mezz'ora di attesa... invece, con la mia adeguatamente modificata(ho aggiunto l'order by) ci ha messo "solo" 30 sec... ma concettualmente fanno la stessa cosa?
    Giusto per capirci... la tabella reale conta 2 milioni di entry

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Se hai voglia posta magari l'output di

    show create table nome_tabella

    e anche quello di

    explain seguito da tutta la mia query.

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.