[gl-como] domanda SQL

Luca Tettamanti kronos.it@gmail.com
Sab 28 Ott 2006 19:49:16 CEST


On 10/28/06, massimo <massimo@gioielleriecolombo.com> wrote:
> Luca Tettamanti ha scritto:
> > On 10/28/06, massimo <massimo@gioielleriecolombo.com> wrote:
> >> SELECT nome, cellulare FROM tabella GROUP nome DESC.
> >
> > Non fa quello che ti aspetti ;) Nella select list possono comparire
> > solo colonne presenti nella group list oppure delle funzioni di
> > aggregazione.
> >
> > La query valida sarebbe:
> >
> > SELECT nome,cellulare FROM tabella GROUP BY nome,cellulare
>
> Scusa, perche' fai la SELECT di due campi e poi li raggruppi per gli
> stessi due campi??
> Non ne basta uno?? (in questo caso nome??)

No, perché in quel caso la query non è SQL valido. I campi nella
select list *devono* comparire nella group list.
'GROUP BY' si limita ad effettuare il raggruppamento; supponi di avere
una tabella fatta così:

id  txt
1   aaa
2   bbb
3   aaa
4   bbb
5   aaa
6   bbb

supponi di eseguire questa query:

SELECT id,txt FROM table GROUP BY txt;

ora quale dovrebbe essere il risultato[1]? Come effetto del
raggruppamento hai una relazione 1:N:
aaa -> {1, 3, 5}
bbb -> {2, 4, 6}

a questo punto quale degli N valori dovrebbe essere restituito?
La query ha senso solo se tutti i campi nella select list sono:
- nella group list
- funzioni di aggregazione

Tenendo l'esempio sopra sarebbe lecito fare:

SELECT SUM(id),txt FROM table GROUP BY txt;
SELECT MAX(id),txt FROM table GROUP BY txt;
SELECT id,txt FROM table GROUP BY txt, id;
...

Spero di essermi spiegato ;)

Luca
[1]Hint: lo so che MySQL accetta la query, ma è un'estensione e non ha
particolarmente senso.


Maggiori informazioni sulla lista gl-como