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

uso de count

Estas en el tema de uso de count en el foro de Mysql en Foros del Web. Hola que tal, alguien sabe como hacer la siguiente consulta?? he buscado en los manuales de referencia de mysql, pero no me queda claro que ...
  #1 (permalink)  
Antiguo 04/11/2010, 17:52
 
Fecha de Ingreso: enero-2010
Mensajes: 152
Antigüedad: 14 años, 3 meses
Puntos: 5
uso de count

Hola que tal, alguien sabe como hacer la siguiente consulta?? he buscado en los manuales de referencia de mysql, pero no me queda claro que es lo que puedo usar dentro de los paréntesis de count...

tengo, por ejemplo, las siguientes dos tablas:
Tabla1
ID---Nombre---
1---Uno
2---Dos

Tabla2

ID---Relacion---categoria
1---1---2
2---2---1
3---1---3
4---1---2
5---2---2

La tabla2 se relaciona con la tabla1 por medio del campo relacion, lo que deseo es crear una query que arroje el siguiente resultado:

tabla1.ID---tabla1.Nombre--- Cat1---Cat2---Cat3
1---uno---0---2---1
2---dos---1---1---0

Es decir, que arroje los campos de tabla1 más la cuenta de cuantas relaciones de cada categoría hay en la tabla2.

Se me ocurre algo así:

selec tabla1.id,
tabla1.nombre,
count(tabla2.categoria=1) as Cat1,
count(tabla2.categoria=2) as Cat2,
count(tabla2.categoria=3) as Cat3
from tabla1 left join tabla2 in tabla1.id=tabla2.relacion
group by tabla1.id

Obviamente esta sentencia no funciona, alguien sabe como conseguir lo que quiero?
  #2 (permalink)  
Antiguo 04/11/2010, 18:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: uso de count

Tu caso es un poquito más complejo y no sirve usar COUNT() para esas discriminaciones, además que un COUNT no puede contener una condición lógica.
Código MySQL:
Ver original
  1.     tabla1.id,
  2.     tabla1.nombre,
  3.     SUM(IF(tabla2.categoria=1, 1, 0)) as Cat1,
  4.     SUM(IF(tabla2.categoria=2, 1, 0)) as Cat2,
  5.     SUM(IF(tabla2.categoria=3, 1, 0)) as Cat3
  6. FROM tabla1 LEFT JOIN tabla2 ON tabla1.id=tabla2.relacion
  7. GROUP BY tabla1.id
No estoy muy seguro de la funcionalidad del GROUP BY en este contexto porque no me puse a revisar detalladamente el ejemplo de datos que posteaste.
Luego reviso mejor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: count
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 07:44.