• User Newbie

    MYSQL strano risultato

    Ciao a tutti,
    mi trovo a combattere con un risultato inaspettato da una query apparentemente semplice, con un Mysql 5 ed un phpmyadmin su linux.

    Lanciando questa query da phpmyadmin:

    SELECT distinct (id_server),bps
    FROM earth_banda_giorno
    ORDER BY bps DESC
    LIMIT 0 , 30

    Ottengo questo risultato (riporto solo alcune righe):
    id_server bps
    129 44153672
    24 44150428
    129 43977130
    24 43957459
    40 43067331
    111 42863806
    129 34975835
    24 34920153
    129 23536162
    24 23526355

    Che è un risultato inaspettato poichè l'id_server viene ripetuto nonostante il distinct.

    La stranezza viene confermata eseguendo la stessa query senza il campo bps nella select il risultato cambia completamente:

    SELECT distinct (id_server)
    FROM earth_banda_giorno
    ORDER BY bps DESC
    LIMIT 0 , 30

    id_server
    27
    15
    40
    76
    72
    140
    44
    133
    97

    Mi chiedo, ma dove è finito l'id_server 129? E' quello con il valore bps più alto in assoluto! Sto sbagliando tutto?
    Io mi ricordavo che il distinct tenesse in considerazione i campi tra le parentesi e solo quelli. Ma a questo punto credo di sbagliarmi e vi chiedo conferma ed un eventuale alternativa.
    Il mio obiettivo, se non fosse chiaro, è di ottenere i primi n id_server con i bps più alti senza ripetizioni (id_server non è unico).
    Sarà che sono ancora un po' assonnato, ma mi sto perdendo 🙂

    Grazie a tutti,
    Algianbex


  • User Attivo

    Prova con DISTINCT tutto in maiuscolo...

    EDIT : Credo che il problema sia il fatto che facendo un distinct dell'id e selezionando anche il campo BPS, visto che questi due sono uniti tra di loro, ti restituisca il risultato inaspettato...Forse con Google....


  • Consiglio Direttivo

    Ciao algianbex e benvenuto nel Forum GT 🙂

    La butto giù come ipotesi: dato che a te interessa il valore massimo di bps hai provato a mettere MAX(bps)? O magari giostrarti con il GROUP BY id_server ? 🙂


  • User Newbie

    Ciao, e grazie per le pronte risposte.
    Ho provato distinct e DISTINCT, ma non ci sono differenze nei risultati. E ancora non mi spiego perchè non funzioni...

    Con la funzione max invece pare funzionare, ma va messo un alias, altrimenti l'ordinamento lo fa su bps e non su max(bps). Stamattina non ci ero arrivato...

    SELECT max( bps ) AS x, id_server
    FROM earth_banda_giorno
    GROUP BY id_server
    ORDER BY x DESC

    bps id_server
    44153672 129
    44150428 24
    43067331 40
    42863806 111
    12047795 133
    11921154 138
    10174521 10
    9687751 55
    9555161 62
    6816340 15

    Grazie ancora e a presto,
    Algianbex


  • Consiglio Direttivo

    Grazie a te di aver postato la soluzione, sarà di certo utile anche ad altri. 😉

    :ciauz: