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

query con where - Como hago para que la funcion Count () tome en cuenta un where

Estas en el tema de query con where - Como hago para que la funcion Count () tome en cuenta un where en el foro de Bases de Datos General en Foros del Web. Hola a todos, Posteo a haber si alguno me ayuda con esta consulta. Yo estoy usando este query SELECT category.category_name, IFNULL( Count( directory.type_biz ) , ...
  #1 (permalink)  
Antiguo 06/02/2009, 10:23
Avatar de saymon  
Fecha de Ingreso: septiembre-2003
Ubicación: Panama
Mensajes: 318
Antigüedad: 20 años, 7 meses
Puntos: 0
query con where - Como hago para que la funcion Count () tome en cuenta un where

Hola a todos,

Posteo a haber si alguno me ayuda con esta consulta.

Yo estoy usando este query

SELECT category.category_name, IFNULL( Count( directory.type_biz ) , 0 ) AS num_categ FROM category LEFT JOIN directory ON category.category_name = directory.type_biz GROUP BY category.category_name

Les explico lo que hace: El lee las categorias de la tabla category y cuenta cuantos registros con esa categoria estan en la tabla directory, y muestra el nombre de categoria (de la tabla category) sin importar si este valor es cero en la tabla directory.

Ahora bien, lo que necesito es que cuando cuente los registros en la tabla directory para esa categoria, solamente cuente los registros que contengan el valor "approved" en el campo "status" (status='approved") tomando en cosideracion que el resultaado del conteo puede ser cero tambien.

Pero no se si se usa where o donde lo coloco, he probado usando where = directory.status = 'approved' antes del GROUP BY pero solamente me imprime o me trae las categorias que tienen valor y los que no tienen no me las muestra..

Alguien que me pueda ayudar con esto, se los agradesco de antemano...
  #2 (permalink)  
Antiguo 06/02/2009, 11:24
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 19 años, 8 meses
Puntos: 6
Respuesta: query con where - Como hago para que la funcion Count () tome en cuenta un

Coloca algunos datos y el resultado que esperas para poder ayudarte.

saludos
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #3 (permalink)  
Antiguo 06/02/2009, 12:05
 
Fecha de Ingreso: julio-2006
Ubicación: Madrid
Mensajes: 943
Antigüedad: 17 años, 9 meses
Puntos: 56
Respuesta: query con where - Como hago para que la funcion Count () tome en cuenta un

Hola,
Si lo entendí bien, creo que debes usar HAVING, que es el equivalente (por decirlo así) a Where cuando tienes grupos (Group BY).
Lo debes colocar tras el group by, es decir antes del punto y coma con el que acabas la select y su sintaxis es:

HAVING nombre_campo operador valor

HAVING directory.status = 'approved'

Espero que sea esto.
Un saludo
  #4 (permalink)  
Antiguo 06/02/2009, 13:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: query con where - Como hago para que la funcion Count () tome en cuenta un

SELECT c.category_name, T2.NUMCATEG, IFNULL(T2.TIPO,"") FROM category c LEFT JOIN (SELECT IFNULL(COUNT(directory.type_biz),0) NUMCATEG, type_biz TIPO, category_name CATEGORIA FROM directory INNER JOIN category ON category.category_name = directory.type_byz WHERE directory.status = "approved" GROUP BY category.category_name)T2 ON c.category_name = T2.CATEGORIA

No sé si funcionará, pero esa es la idea. Con las tablas y algunos datos podríamos hacer las pruebas.
  #5 (permalink)  
Antiguo 06/02/2009, 14:03
Avatar de saymon  
Fecha de Ingreso: septiembre-2003
Ubicación: Panama
Mensajes: 318
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: query con where - Como hago para que la funcion Count () tome en cuenta un

Cita:
Iniciado por jurena Ver Mensaje
SELECT c.category_name, T2.NUMCATEG, IFNULL(T2.TIPO,"") FROM category c LEFT JOIN (SELECT IFNULL(COUNT(directory.type_biz),0) NUMCATEG, type_biz TIPO, category_name CATEGORIA FROM directory INNER JOIN category ON category.category_name = directory.type_byz WHERE directory.status = "approved" GROUP BY category.category_name)T2 ON c.category_name = T2.CATEGORIA

No sé si funcionará, pero esa es la idea. Con las tablas y algunos datos podríamos hacer las pruebas.
Hola juerena, tu respusta me fue de mucha ayuda, me resulto excelente, solamente que le quite este pedasito , IFNULL(T2.TIPO,"").

Pero ahora tengo un pequeño inconveniente, fijate que cuando no hay categorias en lugar de mandar cero ahora me manda null,

lo puedes ver en esa pic http://www.latinpa.com/files_variado...categories.jpg

agradesco cualquier ayuda,

Gracias
  #6 (permalink)  
Antiguo 07/02/2009, 02:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: query con where - Como hago para que la funcion Count () tome en cuenta un

en el primer SELECT, en lugar de:
T2.NUMCATEG

escribe
IFNULL(T2.NUMCATEG,"0") NUMEROCATEG

y ya estará
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:56.