Tema: Explicacion.
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/07/2012, 11:29
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 2 meses
Puntos: 447
Respuesta: Explicacion.

Hola PepeF:

La agrupación es un concepto básico de Base de Datos, así es que por lo que preguntas puedo suponer que no tienes muchos conocimientos sobre este tema ni sobre cómo trabaja el lenguaje de consultas SQL...

La cláusula GROUP BY, como su traducción lo indica, tiene como propósito agrupar información de acuerdo a un criterio en común. Por lo general se utiliza con funciones de agrupación o de agregación (COUNT, MIN, MAX, AVG, SUM) sería conveniente que le dieras un vistazo a cada una de ellas, para que sepas qué hace cada una... Para este ejemplo voy a tomar la función SUM, que es una de las más comunes. Supongamos que tienes esta información.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+----------+-----------------+
  3. | id   | vendedor | piezas_vendidas |
  4. +------+----------+-----------------+
  5. |    1 | hugo     |              10 |
  6. |    2 | paco     |              12 |
  7. |    3 | luis     |              21 |
  8. |    4 | hugo     |              11 |
  9. |    5 | hugo     |               7 |
  10. |    6 | luis     |              13 |
  11. |    7 | paco     |              22 |
  12. |    8 | hugo     |              14 |
  13. |    9 | luis     |              18 |
  14. +------+----------+-----------------+
  15. 9 rows in set (0.02 sec)

Supongamos que queremos obtener el número de piezas vendidas por cada vendedor, eso quiere decir que tendríamos que agrupar los registros por cada categoría:

es decir, para HUGO tendrías que considerar los registros

Código:
+------+----------+-----------------+
| id   | vendedor | piezas_vendidas |
+------+----------+-----------------+
|    1 | hugo     |              10 |
|    4 | hugo     |              11 |
|    5 | hugo     |               7 |
|    8 | hugo     |              14 |
+------+----------+-----------------+
9 rows in set (0.02 sec)
Y lo mismo para Paco y Luis:

Código:
+------+----------+-----------------+
| id   | vendedor | piezas_vendidas |
+------+----------+-----------------+
|    2 | paco     |              12 |
|    7 | paco     |              22 |
+------+----------+-----------------+
9 rows in set (0.02 sec)
Código:
+------+----------+-----------------+
| id   | vendedor | piezas_vendidas |
+------+----------+-----------------+
|    3 | luis     |              21 |
|    6 | luis     |              13 |
|    9 | luis     |              18 |
+------+----------+-----------------+
9 rows in set (0.02 sec)
La función GROUP BY te permite hacer esto de manera automática. Observa que el ID es diferente en cada caso POR LO TANTO NO ES UN DATO COMÚN Y NO DEBERÍA CONSIDERARSE EN LA AGRUPACIÓN.

Código MySQL:
Ver original
  1. mysql> SELECT vendedor, SUM(piezas_vendidas)
  2.     -> FROM tabla
  3.     -> GROUP BY vendedor;
  4. +----------+----------------------+
  5. | vendedor | SUM(piezas_vendidas) |
  6. +----------+----------------------+
  7. | hugo     |                   42 |
  8. | luis     |                   52 |
  9. | paco     |                   34 |
  10. +----------+----------------------+
  11. 3 rows in set (0.00 sec)

Como te comenté al inicio, el comportamiento de la función GROUP BY depende también de la función de agrupación que estés utilizando.

Saludos
Leo.