Hola computer_si:
Con permiso de quimfv, meto mi cuchara en el post:
Código:
Cundo utilizas GROUP BY tambien los tienes que mencionar a exepcion
de los calculados como el SUM, COUNT, Etc.
No necesariamente... algunos otros DBMS como SQL Server y ORACLE te exigen colocar en el GROUP BY todos aquellos campos que listas en el SELECT y que no estén incluidos en una función de agrupación, sin embargo MySQL te permite omitirlos, sin embargo tiene un comportamiento especial que trataré de explicar con este script, supongamos que tenemos estos datos
Código MySQL:
Ver original+-------------+--------+--------+
| descripcion | campo1 | campo2 |
+-------------+--------+--------+
| uno | 1 | 1 |
| uno | 2 | 2 |
| uno | 3 | 3 |
| dos | 2 | 2 |
| dos | 1 | 3 |
| dos | 3 | 1 |
| tres | 3 | 1 |
| tres | 2 | 2 |
| tres | 1 | 3 |
+-------------+--------+--------+
Observa qué es lo que muestra cada uno de los distintos "acomodos" de los campos:
Código MySQL:
Ver originalmysql
> SELECT descripcion
, campo1
, campo2
FROM tabla
+-------------+--------+--------+
| descripcion | campo1 | campo2 |
+-------------+--------+--------+
| dos | 2 | 2 |
| tres | 3 | 1 |
| uno | 1 | 1 |
+-------------+--------+--------+
muestra la primer aparición de los campos 1 y 2 para cada categoría que se están agrupando.
Código MySQL:
Ver original+-------------+--------+-------------+
| descripcion
| campo1
| MIN(campo2
) | +-------------+--------+-------------+
| dos | 2 | 1 |
| tres | 3 | 1 |
| uno | 1 | 1 |
+-------------+--------+-------------+
Para el caso de los campos que se incluyen en el SELECT, pero que no se incluyen en el GROUP BY como el campo 1 te muestra la primer aparición, independientemente del valor que le corresponda en al campo 2
Código MySQL:
Ver original+-------------+-------------+-------------+
| descripcion
| MIN(campo1
) | MIN(campo2
) | +-------------+-------------+-------------+
| dos | 1 | 1 |
| tres | 1 | 1 |
| uno | 1 | 1 |
+-------------+-------------+-------------+
Aquí creo que no hay problema con la utilización.
Código MySQL:
Ver original+-------------+--------+-------------+
| descripcion
| campo1
| MIN(campo2
) | +-------------+--------+-------------+
| dos | 1 | 3 |
| dos | 2 | 2 |
| dos | 3 | 1 |
| tres | 1 | 3 |
| tres | 2 | 2 |
| tres | 3 | 1 |
| uno | 1 | 1 |
| uno | 2 | 2 |
| uno | 3 | 3 |
+-------------+--------+-------------+
Observa que al incluir el campo 2 en el GROUP BY aquí si se considera para hacer los cortes en las agrupaciones.
Saludos
Leo.