Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

agrupar y obtener suma de varios cont

Estas en el tema de agrupar y obtener suma de varios cont en el foro de Mysql en Foros del Web. Buenos días, necesitaría ayuda, tengo una base de datos con 3 columnas: local1 , local2, local3 y necesito saber cuantas veces se repite el nombre ...
  #1 (permalink)  
Antiguo 18/01/2013, 09:14
 
Fecha de Ingreso: abril-2002
Mensajes: 68
Antigüedad: 22 años
Puntos: 0
agrupar y obtener suma de varios cont

Buenos días,

necesitaría ayuda, tengo una base de datos con 3 columnas: local1 , local2, local3
y necesito saber cuantas veces se repite el nombre de local en las tres columnas.
y listar el nombre de local con el numero de veces que se repite.

*los nombre puedes estar en cualquiera de las columnas.


-----------------------------------------

ejemplo resultado a obtener

nombre a 2
nombre b 1
nombre c 3


Tengo este código, pero no me suma resultados y me da las veces que se repite en cada columna.

ejemplo resultado a que me da con este codigo

nombre a 1
nombre a 1
nombre b 1
nombre c 2
nombre c 1



Código:
SELECT calendario.local1, Count(calendario.local1) AS CuentaDelocal1
FROM calendario
GROUP BY calendario.local1
UNION
SELECT calendario.local2, Count(calendario.local2) AS CuentaDelocal2
FROM calendario
GROUP BY calendario.local2
UNION
SELECT calendario.local3, Count(calendario.local3) AS CuentaDelocal3
FROM calendario
GROUP BY calendario.local3
__________________
Lordztein
  #2 (permalink)  
Antiguo 18/01/2013, 12:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: agrupar y obtener suma de varios cont

Hola Lordztein:

En realidad no estas tan errado en lo que intentas hacer, sin embargo hay algunos detalles que tienes que considerar. En primer lugar, la agrupación la tienes que hacer después de unir los campos, no antes... para que sólo te obtenga un total... segundo, hay que tener cuidado al hacer UNION's, ya que si no no especificas la palabra ALL y existen registros duplicados, SÓLO SE AGREGA UNA VEZ... podrías hacerlo así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+----------+----------+----------+
  3. | id   | local1   | local2   | local3   |
  4. +------+----------+----------+----------+
  5. |    1 | nombre a | nombre b | nombre b |
  6. |    1 | nombre a | nombre a | nombre c |
  7. |    1 | nombre b | nombre a | nombre a |
  8. |    1 | nombre c | nombre a | nombre b |
  9. +------+----------+----------+----------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT nom_local, COUNT(nom_local)
  13.     -> FROM
  14.     -> (  SELECT local1 nom_local
  15.     ->    FROM tabla
  16.     ->    UNION ALL
  17.     ->    SELECT local2 nom_local
  18.     ->    FROM tabla
  19.     ->    UNION ALL
  20.     ->    SELECT local3 nom_local
  21.     ->    FROM tabla
  22.     -> ) T GROUP BY 1;
  23. +-----------+------------------+
  24. | nom_local | COUNT(nom_local) |
  25. +-----------+------------------+
  26. | nombre a  |                6 |
  27. | nombre b  |                4 |
  28. | nombre c  |                2 |
  29. +-----------+------------------+
  30. 3 rows in set (0.00 sec)

Dale un vistazo y nos comentas.

Saludos
Leo.
  #3 (permalink)  
Antiguo 21/01/2013, 05:00
 
Fecha de Ingreso: abril-2002
Mensajes: 68
Antigüedad: 22 años
Puntos: 0
Respuesta: agrupar y obtener suma de varios cont

Muchas Gracias leonardo_josue, funciona perfectamente ( lo único que faltaba era el AS entre local1 nom_local y agrupar por nom_local )

de esta forma me funciona perfectamente Gracias !!

Código:
mysql> SELECT * FROM tabla;
+------+----------+----------+----------+
| id   | local1   | local2   | local3   |
+------+----------+----------+----------+
|    1 | nombre a | nombre b | nombre b |
|    1 | nombre a | nombre a | nombre c |
|    1 | nombre b | nombre a | nombre a |
|    1 | nombre c | nombre a | nombre b |
+------+----------+----------+----------+
4 rows IN SET (0.00 sec)
 
mysql> SELECT nom_local, COUNT(nom_local)
    -> FROM
    -> (  SELECT local1 AS nom_local
    ->    FROM tabla
    ->    UNION ALL
    ->    SELECT local2 AS nom_local
    ->    FROM tabla
    ->    UNION ALL
    ->    SELECT local3 AS nom_local
    ->    FROM tabla
    -> ) T GROUP BY 1, nom_local;
+-----------+------------------+
| nom_local | COUNT(nom_local) |
+-----------+------------------+
| nombre a  |                6 |
| nombre b  |                4 |
| nombre c  |                2 |
+-----------+------------------+
3 rows IN SET (0.00 sec)
__________________
Lordztein
  #4 (permalink)  
Antiguo 21/01/2013, 10:46
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: agrupar y obtener suma de varios cont

Hola de nuevo Lordztein:

Cita:
lo único que faltaba era el AS entre local1 nom_local y agrupar por nom_local
Estás en dos pequeños errores: Primero, AS es una palabra OPCIONAL para definir los alias de los campos, de hecho desde hace mucho tiempo que no forma parte del estándar SQL y se conserva sólo para mantener la compatibilidad... es por eso que lo omití en mi consulta.

Segundo, al poner GROUP BY 1 estás indicando que te ordene por el campo que se encuentra en la posición 1 (que en este caso es el campo nom_local, es decir, es lo mismo poner

Código:
GROUP BY 1

o

GROUP BY nom_local

o 

GROUP by 1, nom_local

o

GROUP by nom_local, nom_local
Haz la prueba y verás que el resultado es EXACTAMENTE EL MISMO.

Saludos
Leo.
  #5 (permalink)  
Antiguo 20/02/2013, 09:01
 
Fecha de Ingreso: abril-2002
Mensajes: 68
Antigüedad: 22 años
Puntos: 0
Respuesta: agrupar y obtener suma de varios cont

Vaya ! Gracias Leonardo_josue, no me había dado cuenta tu respuesta.

Gracias una vez más.

Una consulta si necesito ordenar por el valor resultante del count como tengo que hacerlo?
__________________
Lordztein
  #6 (permalink)  
Antiguo 20/02/2013, 10:34
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: agrupar y obtener suma de varios cont

Hola de nuevo Lordztein:

Por favor, NO REVIVAS TEMAS VIEJOS. Este tema lo tratamos desde hace semana, si tienes una nueva pregunta, bueno, abre un nuevo tema y lo tratamos, ojo para la siguiente.

En cuanto a la pregunta de la ordenación, la puedes hacer de dos maneras, una sería colocando un alias al campo COUNT para poder hacer referencia en el ORDER BY:

Código:
SELECT nom_local, COUNT(nom_local) total
FROM
(  SELECT local1 nom_local
   ......
) T GROUP BY 1
ORDER BY total;
La otra manera sería simplemente hacer referencia por la posición del campo, de la misma manera como lo hago en el GROUP BY:

Código:
SELECT nom_local, COUNT(nom_local)
FROM
(  SELECT local1 nom_local
   ......
) T GROUP BY 1
ORDER BY 2;
Saludos
Leo.

Etiquetas: agrupar, resultados, select, suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.