PDA

View Full Version : [MySQL] Query con ORDER BY e GROUP BY


breiko
12-10-2005, 18:34
Ciao ragazzi, sono di fronte ad una query in cui devo raggruppare alcune linee quindi ordinarle.

Il problema è questo. Faccio un esempio.

id "1" titolo "gianni" categoria "mobili"
id "2" titolo "pippo" categoria "elettrodomestici"
id "3" titolo "gianni" categoria "mobili"

se faccio group by titolo succede che le linee 1 e 3 si uniscono e l'id si sovrappone.
Questo poi mi fa perdere l'ordine naturale quindi con ORDER BY id la linea 1 verrà dopo la linea 2.

Non so se sono stato chiaro, spero di si.
Il mio caso era troppo complesso da riportare quindi ho fatto un esempio.

Come posso evitare questo fatto? C'è un modo?

mailand
13-10-2005, 12:31
se la select è esattamente così con quest'ordine dubito che raggruppi qualcosa...

se vuoi ordinarle per id non puoi semplicemente dire "ORDER BY ID ASC" se crescente o "ORDER BY ID DESC" per decrescente? :what:

anche se il tuo esempio non mi è molto chiaro... ;)

breiko
13-10-2005, 13:36
Io faccio order by id desc però prima di farlo devo raggruppare e questo mi sovrascrive gli id.

Così perdo l'ordine originale. Io cerco il metodo per ragruppare che mi permetta di scegliere quale id finale risulterà dal raggruppamento.

Sono stato chiaro adesso?

mailand
13-10-2005, 16:27
ok credo di aver capito

ma credo che non sia possibile: se raggruppi perdi l'id, a meno di non assegnarne uno nuovo...

PFed
14-10-2005, 18:06
SELECT Min(ID) As PrimoID, Titolo, ...
FROM Tabella
WHERE ....
GROUP BY Titolo
ORDER BY PrimoID

breiko
14-10-2005, 18:22
SELECT Min(ID) As PrimoID, Titolo, ...
FROM Tabella
WHERE ....
GROUP BY Titolo
ORDER BY PrimoID

Veramente grazie. Anche perchè ti sei iscritto per rispondermi.
Sei un grande!

PFed
14-10-2005, 18:35
Di nulla, ma non devi ringraziarmi; in realtà mi ero iscritto per chiedere informazioni nella sezione Diamonds; passando ho visto la tua domanda e ho risposto al volo.

Per aggiungere informazioni al mio post precedente, puoi usare funzioni diverse da min a seconda delle tue esigenze, come Max() -autoesplicativa-, First() -restituisce il primo elemento incontrato del gruppo, senza cura dell'ordinamento- etc. etc.

Ulteriori informazioni le puoi trovare su google cercando "funzioni aggregazione sql"

Saluti

breiko
14-10-2005, 18:39
Si infatti alla fine ho usato max(id).
Grazie ancora.