Está en la página 1de 5

Hemos aprendido que las funciones de agrupamiento permiten contar registros, calcular sumas y

promedios, obtener valores mximos y mnimos. Tambin dijimos que dichas funciones operan
sobre conjuntos de registros, no con datos individuales.
Generalmente esta funciones se combinan con la sentencia "group by", que agrupa registros para
consultas detalladas.
Queremos saber la cantidad de visitantes de cada ciudad, podemos tipear la siguiente sentencia:
select count(*) from visitantes
where ciudad='Cordoba';
y repetirla con cada valor de "ciudad":
select
where
select
where
...

count(*) from visitantes


ciudad='Alta Gracia';
count(*) from visitantes
ciudad='Villa Dolores';

Pero hay otra manera, utilizando la clusula "group by":


select ciudad, count(*)
from visitantes
group by ciudad;
Entonces, para saber la cantidad de visitantes que tenemos en cada ciudad utilizamos la funcin
"count()", agregamos "group by" y el campo por el que deseamos que se realice el agrupamiento,
tambin colocamos el nombre del campo a recuperar.
La instruccin anterior solicita que muestre el nombre de la ciudad y cuente la cantidad
agrupando los registros por el campo "ciudad". Como resultado aparecen los nombres de las
ciudades y la cantidad de registros para cada valor del campo.
Para obtener la cantidad visitantes con telfono no nulo, de cada ciudad utilizamos la funcin
"count()" envindole como argumento el campo "telefono", agregamos "group by" y el campo por
el que deseamos que se realice el agrupamiento (ciudad):
select ciudad, count(telefono)
from visitantes
group by ciudad;
Como resultado aparecen los nombres de las ciudades y la cantidad de registros de cada una, sin
contar los que tienen telfono nulo. Recuerde la diferencia de los valores que retorna la funcin
"count()" cuando enviamos como argumento un asterisco o el nombre de un campo: en el primer
caso cuenta todos los registros incluyendo los que tienen valor nulo, en el segundo, los registros
en los cuales el campo especificado es no nulo.
Para conocer el total de las compras agrupadas por sexo:
select sexo, sum(montocompra)
from visitantes

group by sexo;
Para saber el mximo y mnimo valor de compra agrupados por sexo:
select
group
select
group

sexo, max(montocompra) from visitantes


by sexo;
sexo, min(montocompra) from visitantes
by sexo;

Se pueden simplificar las 2 sentencias anteriores en una sola sentencia, ya que usan el mismo
"group by":
select sexo, max(montocompra),
min(montocompra)
from visitantes
group by sexo;
Para calcular el promedio del valor de compra agrupados por ciudad:
select ciudad, avg(montocompra) from visitantes
group by ciudad;
Podemos agrupar por ms de un campo, por ejemplo, vamos a hacerlo por "ciudad" y "sexo":
select ciudad, sexo, count(*) from visitantes
group by ciudad,sexo;
Tambin es posible limitar la consulta con "where".
Vamos a contar y agrupar por ciudad sin tener en cuenta "Cordoba":
select ciudad, count(*) from visitantes
where ciudad<>'Cordoba'
group by ciudad;
Podemos usar las palabras claves "asc" y "desc" para una salida ordenada:
select ciudad, count(*) from visitantes
group by ciudad desc;

se supone que tienes una tabla con dos campos articulo y el precioArticulo entonces quieres
sumar todos los precios de un articulo solo tienes que realizar esta consulta
SELECT articulo, sum(precioArticulo) as suma FROM $tabla group by
articulo
El where no es obligatorio en las consultas.
Podrias usar Having suma > 10 para indicar los articulos cuyo precio es mayor a 10.

Ver original

1. SELECT count(*)
2. FROM (SELECT cedula FROM lista GROUP BY cedula) AS Total;

Hola Nuc134rB0t:
Si bien ya resolviste tu problema, te comento que hay otra forma de llegar al mismo
resultado sin necesidad de utilizar subconsultas. El operador COUNT soporta
modificador DISTINCT, de tal manera que puedes hacer algo como esto:
Cdigo:
SELECT COUNT(DISTINCT cedula) FROM lista;
Checa este script, observa que tu consulta y esta consulta arrojan el mismo resultado.
Cdigo MySQL:
Ver original

1. mysql> SELECT * FROM lista;


2. +---------+--------+--------+
3. | idtabla | cedula | nombre |
4. +---------+--------+--------+
5. |

1 |

100 | PEDRO

6. |

2 |

100 | PEDRO

7. |

3 |

100 | PEDRO

8. |

4 |

102 | JOSE

9. |

5 |

102 | JOSE

10. |

6 |

135 | MGUEL

11. +---------+--------+--------+
12. 6 rows in set (0.00 sec)
13.
14. mysql> SELECT COUNT(*)
15.

-> FROM (SELECT cedula FROM lista

16.

-> GROUP BY cedula) AS Total;

17. +----------+
18. | COUNT(*) |
19. +----------+

20. |

3 |

21. +----------+
22. 1 row in set (0.00 sec)
23.
24. mysql> SELECT COUNT(DISTINCT cedula) FROM lista;
25. +------------------------+
26. | COUNT(DISTINCT cedula) |
27. +------------------------+
28. |

3 |

29. +------------------------+
30. 1 row in set (0.00 sec)

Saludos
Leo

También podría gustarte