- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- MYSQL strano risultato
-
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
FROMearth_banda_giorno
ORDER BY bps DESC
LIMIT 0 , 30Ottengo 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 23526355Che è 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)
FROMearth_banda_giorno
ORDER BY bps DESC
LIMIT 0 , 30id_server
27
15
40
76
72
140
44
133
97Mi 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 perdendoGrazie a tutti,
Algianbex
-
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....
-
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 ?
-
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
FROMearth_banda_giorno
GROUP BY id_server
ORDER BY x DESCbps id_server
44153672 129
44150428 24
43067331 40
42863806 111
12047795 133
11921154 138
10174521 10
9687751 55
9555161 62
6816340 15Grazie ancora e a presto,
Algianbex
-
Grazie a te di aver postato la soluzione, sarà di certo utile anche ad altri.